我试图遍历一些xml并将字符串的值设置为等于特定节点的内容。XML看起来像:
<RootNode>
<SubNode>test<SubNode>
<SubNode><ExtraMarkup>some value</ExtraMarkup><SubNode>
</RootNode>
其中每个子节点可以包含一个值或其他xml子节点。对于第一个子节点,此代码工作正常:
for Node := 0 to RootNode.childNodes.length-1 do begin
AttrValue := RootNode.childNodes[Node].selectSingleNode('SubNode').Text;
// More code here...
end;
问题是子节点包含子节点时。我希望attrValue的值是字符串形式的“
test
”或“<ExtraMarkup>some value</ExtraMarkup>
”。如果得到的不是文本而是xml属性,则标记不会被保留。
最佳答案
我想你可能想要“ixmlnode.nodevalue”。
下面是一个例子:
Function TGlobalConfig.GetXmlItem(CurNode : IXMLNODE; Section : String; var Value : String; Default : String) : Boolean;
var
ChildNode: IXMLNode;
begin
if Assigned(CurNode) then
begin
ChildNode := CurNode.ChildNodes.FindNode(Section);
if (ChildNode <> nil) then
if VarIsNull(ChildNode.NodeValue) then
Value := Default
else Value := ChildNode.NodeValue;
...