【问题标题】:Why doesn't DOMXPath work?为什么 DOMXPath 不起作用?
【发布时间】:2014-01-10 23:43:15
【问题描述】:

我一直在尝试编写一个 PHP 脚本来使用 DOMXPath 解析 XML 文档;但是,我似乎遗漏了一些东西,因为我的 XPath 查询都没有返回任何内容。所以我试图淡化我的脚本来尝试解析一个非常基本的 XML 文档,但这也不起作用。我根据this XPath example 编写了这个脚本。

<?php

$xml  = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<bookstore>';
$xml .= '<book category="COOKING">';
$xml .= '<title lang="en">Everyday Italian</title>';
$xml .= '<author>Giada De Laurentiis</author>';
$xml .= '<year>2005</year>';
$xml .= '<price>30.00</price>';
$xml .= '</book>';
$xml .= '</bookstore>';

$dom = new DOMDocument('1.0');
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$result = $xpath->query('/bookstore/book[1]/title');
var_dump($result);

?>

问题是我的 $result always 的 var_dump 返回类似:

object(DOMNodeList)#4 (0) { }

...表示它什么也没找到。

【问题讨论】:

    标签: php xpath domdocument domxpath


    【解决方案1】:

    在这种情况下,var_dump() 的输出具有误导性。 试试

    foreach($result as $e) {
      echo $e->nodeValue;
    }
    

    echo $result->length;
    

    改为。

    例如使用您的代码(直到 $result = $xpath....)+

    echo phpversion(), "\n";
    var_dump($result);
    echo $result->length, "\n";
    foreach($result as $e) {
      echo $e->nodeValue;
    }
    

    输出是

    5.3.1
    object(DOMNodeList)#4 (0) {
    }
    1
    Everyday Italian
    

    【讨论】:

    • 哎呀。我的错误是假设 var_dump 会告诉我一些东西。谢谢!
    【解决方案2】:

    我一直在努力处理在根节点中指定 xmlns="http://www.w3.org/2005/Atom" 的文档。把它拿出来,xpath 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2019-08-06
      • 2016-07-05
      • 2011-08-06
      • 2013-01-18
      相关资源
      最近更新 更多