2012-04-02 11 views
0

ノードに複数の要素が含まれているXmlStringがあります。XML文書の子ノードの値にアクセスするにはどうすればよいですか?

<Element> 
    <AccountName>My Account Name</AccountName> 
    <FullName>Edward Jones</FullName> 
</Element> 

つまり私は、ノード名、すなわちアカウント名、フルネームにアクセスすることができますが、私は値にアクセスすることはできませんか、彼らは空白に戻ります。ここに私のコードです。

Doc : IXMLDocument; 
begin 
    Doc := XMlDoc.LoadXMLData(XmlString); 
    Doc.DOMDocument.getElementsByTagName('Element').length; // = 11 
    Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].nodeName; // = AccountName 
    Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].nodeValue; 
end; 

私が期待するものである私のXmlStringの「要素」ので、これはチェックアウトし、nodeNameを=アカウント名の11件のインスタンスがあります。しかしnodeValueは空白です。値を引き出す別の方法がありますか?誰かがノードの値が空白である理由を知っていますか?

答えて

2

推測:標準DOM APIのように見えるので、要素ノードの下にテキストノードがある可能性があります。

Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].childNodes[0].nodeValue; 
+0

ありがとうございました! – Trevor

3

下位レベルのDOMレベルまで下がっています。その点で、@ MizardXの応答は正しい - テキストは、あなたが直接アクセスしなければならないそれ自身の別個の子ノードに含まれている。ただし、IXMLDocumentを使用しているため、遠くにドロップする必要はありません。 IXMLNodeのインターフェイスは上位です。これらの詳細は表示されず、ノードやそのデータへのアクセスが容易になります。

var 
    Doc : IXMLDocument; 
    ElementNode, AccountNameNode, FullNameNode : IXMLNode; 
    Count: Integer; 
    NodeName, NodeText: String; 
begin 
    Doc := LoadXMLData(XmlString); 
    ElementNode := Doc.DocumentElement; 
    Count := ElementNode.ChildNodes.Count; // = 2 

    AccountNameNode := ElementNode.ChildNodes[0]; 
    NodeName := AccountNameNode.NodeName; 
    NodeText := AccountNameNode.Text; 

    FullNameNode := ElementNode.ChildNodes[1]; 
    NodeName := FullNameNode.NodeName; 
    NodeText := FullNameNode.Text; 
end; 
関連する問題