3

我正在尝试遍历一些 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 属性而不是文本,则不会保留标记。

4

3 回答 3

1

我想你可能想要“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;
       ...
于 2012-08-22T16:32:49.997 回答
1

而不是.Text您需要诸如InnerTextor之类的属性InnerXml

于 2012-08-22T16:54:27.243 回答
0
for Node := 0 to RootNode.childNodes.length-1 do begin

// Check if the Value stored in SubNode node is xml
    if (RootNode.childNodes[Node].selectSingleNode('SubNode').hasChildNodes and
        DealAttributesNode.childNodes[Node].selectSingleNode('SubNode').childNodes[0].hasChildNodes) then begin
        AttrValue := RootNode.childNodes[Node].selectSingleNode('SubNode').childNodes[0].Xml;
    end
    else begin
        AttrValue := RootNode.childNodes[Node].selectSingleNode('SubNode').Text;
    end;
end;
于 2012-09-17T10:24:38.237 回答