我有一个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个'Element'实例,因此检查出来,nodeName = AccountName就是我所期望的。但nodeValue是空白的。还有另一种方法来拉动价值观吗?有谁知道节点值为空的原因?
答案 0 :(得分: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;
答案 1 :(得分:2)
猜测:它看起来像标准的DOM API,所以你可以在元素节点下面有一个Text-node。
Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].childNodes[0].nodeValue;