2014-05-22 67 views
2

如何查询PHP中另一个xpath查询的节点结果?从另一个xpath查询节点查询xpath

假设我有以下XML:

<Orders> 
     <Order> 
     <OrderTotal> 
      <Amount>15.45</Amount> 
      <CurrencyCode>USD</CurrencyCode> 
     </OrderTotal> 
     <ShippingAddress> 
      <Name>John Doe</Name> 
      <CountryCode>US</CountryCode> 
      <StateOrRegion>TX</StateOrRegion> 
      <City>Austin</City> 
     </ShippingAddress> 
     </Order> 
</Orders> 

这似乎并不工作:

foreach ($xo->xpath("//Orders/Order") as $o) { 
    $order['total'] = $o->xpath('OrderTotal/Amount'); 
} 

如果我做了以下则total将有一个价值,但我不能存储一个对象链等我能的XPath字符串:

foreach ($xo->xpath("//Orders/Order") as $o) { 
    $order['total'] = (string)$o->OrderTotal->Amount; 
} 
+0

提供一些示例数据 –

+0

把它添加到职位! – eComEvo

+1

它适用于我:'$ order ['total'] [0] == '15 .45';' –

回答

2

SimpleXMLElement::xpath()ř蚀刻出一组SimpleXMLElement对象。您需要从列表中的第一个对象获取数据。

foreach ($xo->xpath("//Orders/Order") as $o) { 
    $order['total'] = $o->xpath('OrderTotal/Amount')[0]; 
} 

可以使用Xpath表达式直接返回标量值。例如,string()函数将节点列表的第一个元素转换为字符串。这些表达式不受SimpleXML支持,您需要使用DOMXpath :: evaluate()。

foreach ($xpath->evaluate("//Orders/Order") as $node) { 
    $order['total'] = $xpath->evaluate('string(OrderTotal/Amount)', $node); 
} 

这里是结果处理小演示:https://eval.in/155586