我有以下 XML 片段作为我正在使用最新的 OmniXML 快照处理的较大 XML 文件的一部分:
<OrderRequestHeader>
<!-- snipped XML bits here -->
<ShipTo>
<Address addressID="">
<Name xml:lang="en">SOME COMPANY</Name>
<PostalAddress name="default">
<DeliverTo>John Doe</DeliverTo>
<Street>123 Any St</Street>
<City>Nowhere</City>
<State>AK</State>
<PostalCode>99999</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
<Email/>
<Phone>
<TelephoneNumber>
<CountryCode isoCountryCode=""/>
<AreaOrCityCode/>
<Number></Number>
</TelephoneNumber>
</Phone>
</Address>
</ShipTo>
<!-- more XML stuff follows -->
</OrderRequestHeader>
我目前有一个指向<ShipTo>
节点的变量,并且想要选择<Name>
节点的内容。我正在使用以下代码,但Node2
即将出现Nil
......
procedure ProcessXML;
var
Node1, Node2: IXMLNode;
begin
Node1 := FindNode(OrderHeader, 'ShipTo');
// the above is working. Node points to the <ShipTo> node
Node2 := SelectNode(Node1, 'Name');
// the above line doesn't work. Node2 is Nil
end;
为什么是Node2
Nil
?根据 中的帮助OmniXMLUtils.pas
,SelectNode
将选择可能不止一个级别的单个节点。肯定有<Name>
节点。即使试图通过XPathSelect(Node1, 'Name');
返回一个空列表来查找节点。我是否以某种方式错误地使用了 OmniXML?是否可以在<Name>
不先选择节点的情况下到达<Address>
节点?