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

时间:2017-12-09 18:23:48

标签: php xml xpath xml-parsing domxpath

我正在尝试理解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');

所以我的问题是,为什么我的前两个查询不起作用?不是元素&lt; FinancialEvents&gt;也是一个同名的节点?

由于

1 个答案:

答案 0 :(得分:0)

未经测试但您可以尝试:

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

我怀疑前几个查询没有返回节点列表是因为如果你提供了一个引用节点(这将是一个DOMNode {{1},你有效地尝试在根级别找到节点FinancialEvents。 })对于查询然后它将工作。