【问题标题】:How do I access the child node values in my XML document?如何访问我的 XML 文档中的子节点值?
【发布时间】:2012-04-02 16:31:03
【问题描述】:

我有一个 XmlString,其中包含多个元素及其节点。

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

我可以访问节点名称,即 AccountName、FullName,但我无法访问这些值或者它们返回空白。这是我的代码。

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 中有 11 个“元素”实例,因此可以检查,nodeName = AccountName 这是我所期望的。但是 nodeValue 是空白的。还有另一种方法来提取值吗?有谁知道为什么节点值是空白的?

【问题讨论】:

    标签: xml delphi xml-parsing delphi-2009


    【解决方案1】:

    您将一直下降到低级 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;   
    

    【讨论】:

      【解决方案2】:

      猜测:它看起来像标准 DOM API,因此您可以在元素节点下方有一个文本节点。

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

      【讨论】:

        猜你喜欢
        • 2016-02-02
        • 2020-11-14
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        相关资源
        最近更新 更多