如何在PHP中查询另一个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 :(得分: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