我试图遍历一些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;
       ...

10-08 19:48