2012-04-02 57 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; 

還有的「元素」的11個實例在我的了XmlString所以這次檢查出來,節點名=帳戶名是我所期望的。但是nodeValue是空白的。是否有另一種方式來拉動價值?有誰知道爲什麼節點值是空白的?

回答

2

猜測:它看起來像標準的DOM API,所以你可以在元素節點下面有一個Text-node。

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

感謝那些沒有的伎倆! – Trevor 2012-04-02 17:59:53

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;