从特定的节点xml文件获取值

时间:2019-06-17 17:23:54

标签: delphi

如何从该xml文件中获取值50.76,我可以获取该节点。 enter image description here

我尝试读取节点

 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;

2 个答案:

答案 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]);