php - 从另一个 xpath 查询节点查询 xpath

标签 php xml xpath simplexml

如何在 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/

相关文章:

php - 数据未插入生产站点的数据库

php - 从 print_r 输出中删除数组 ( [0] =>

sql - 如何使用一个 sql 查询将任何数据库结构转换为 xml?

javascript - JQuery 的 XPath 选择器

xml - 在 XSLT 中获取父元素

php - 使用一个查询更新 MySQL 中的 2 个或更多列

php - 使用 zend 框架的 SQL 查询逻辑

c++ - QXmlStreamReader 说我在 XML 文件的末尾,而在它的中间

可以建议 xsd 元素后代的 Java XML Schema 库

javascript - 如何通过 Java 使用 Selenium 从 en.wikipedia.org 中提取一个国家的人口数据