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

代わりに、または.Textなどのプロパティが必要です。InnerTextInnerXml

于 2012-08-22T16:54:27.243 に答える
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 に答える
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 に答える