【问题标题】:PHP DOMXPath Query by node name not finding anythingPHP DOMXPath 按节点名称查询未找到任何内容
【发布时间】:2018-05-23 17:24:47
【问题描述】:

我正在尝试了解 PHP 中 DOMXPath 的基础知识。我有一个以以下内容开头的 XML 文件。

<?xml version="1.0"?>
<ListFinancialEventsResponse xmlns="http://mws.amazonservices.com/Finances/2015-05-01">
  <ListFinancialEventsResult>
    <FinancialEvents>
      <ShipmentEventList>
        <ShipmentEvent>

我正在尝试使用下面的 PHP 获取 FinancialEvents 标签,并尝试了一些不同的 xpath 查询尝试,但都不起作用。

  $file = file_get_contents('file.xml');
  $dom = new DOMDocument();
  $dom->loadXML($file);

  $xpath = new DOMXPath($dom);
  $xpath->registerNamespace('m','http://mws.amazonservices.com/Finances/2015-05-01');

  $events = $xpath->query('FinancialEvents');  // Attempt 1
  $events = $xpath->query('m:FinancialEvents');// Attempt 2

根据文档,这些应返回名称为“FinancialEvents”的所有节点。我知道如果我使用下面的 xpath 查询它会起作用

  $events = $xpath->query('//m:FinancialEvents');

所以我的问题是,为什么我的前 2 个查询不起作用?元素不也是同名节点吗?

谢谢

【问题讨论】:

    标签: php xml xpath xml-parsing domxpath


    【解决方案1】:

    未测试,但您可以尝试:

    $query='//ListFinancialEventsResult/FinancialEvents';
    $events=$xp->query( $query );
    if( !empty( $events ) && $events->length > 0 ){
        foreach( $events as $event ){
            echo $event->nodeValue;
        }
    }
    

    我怀疑前几个查询不返回节点列表是因为您正在有效地尝试在根级别查找节点 FinancialEvents ~ 如果您为查询然后就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      相关资源
      最近更新 更多