如何在 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;
}
最佳答案
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
关于php - 从另一个 xpath 查询节点查询 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797379/