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