首页 文章

PHP DOMXPath按节点名查询没有找到任何内容

提问于
浏览
0

我试图理解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');

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

谢谢

1 回答

  • 0

    未经测试但您可以尝试:

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

    我怀疑前几个查询没有返回节点列表是因为你有效地尝试在根级别找到节点 FinancialEvents 如果你为查询提供了一个引用节点(它将是一个DOMNode ListFinancialEventsResult ),那么它就可以工作了 .

相关问题