我尝试读取节点
XMLDoc.FileName := 'myfile.xml';
XMLDoc.Active:=True;
XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('m:properties') ;
ANode := StartItemNode;
repeat
STitle := ANode.ChildNodes['d:DollarSellRate m:type'].Text;
ANode := ANode.NextSibling;
until ANode = nil;
答案 0 :(得分:3)
ANode.ChildNodes['d:DollarSellRate m:type']
不是通过名称引用节点的正确方法。 m:type
不是节点名称的一部分,它是d:DollarSellRate
节点的属性。
实际上,您甚至根本无法正确地深入了解节点的父/子层次。在声明中:
XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('m:properties') ;
XMLDoc.DocumentElement
属性引用顶级<feed>
节点,而其ChildNodes.First
属性引用其<id>
子节点,而该子节点又没有{{1 }}子节点,因此<m:properties>
将返回FindNode()
。
此外,您感兴趣的XML节点正在使用多个XML名称空间,因此在搜索节点时必须考虑这些名称空间。仅当子节点与其父节点位于同一名称空间中时,才能使用nil
。如果子项位于其他名称空间中,则必须使用ChildNodes['name']
。有关更多详细信息,请参见XML Namespace in Delphi。
尝试更多类似的方法:
ChildNodes.FindNode('name', 'namespace')
答案 1 :(得分:-2)
我用这段代码得到了价值
Feed := XMLDoc.DocumentElement;
Entry := Feed.ChildNodes['entry'];
Content := Entry.ChildNodes['content'].ChildNodes[0];
Result := StrToFloat (Content.ChildValues[5]);