为什么PHP中的xPath查询不起作用?

时间:2012-11-06 19:40:42

标签: php xpath xml-parsing domxpath

我是PHP和stackoverflow的新手。我创建了一个脚本,该脚本从表单中获取内容并搜索与给定的类别和主题相对应的文件列表。现在,xPath部分在启动脚本时抛出错误。它说:

致命错误:在第10行的非对象上调用成员函数getElementsByTagName()。

以下是代码:

if (isset($_GET["subject"])){
    $subject = $_GET["subject"];
    $category = $_GET["category"];
    $doc = new DOMDocument();
    $doc->load('Files.xml');
    $xpath = new DOMXPath($doc);
    //subject
    $subjectpath = 'subject[@name="' . $subject . '"]';
    $ssubjectfiles = $xpath->query($subjectpath)->item(0);
    $subjectfiles = $ssubjectfiles->getElementsByTagName('file');
    //category
    $categorypath = 'subject[@name="' . $subject . '"]/category[@name="' . $category . '"]';
    $scategoryfiles = $xpath->query($categoryfiles)->item(0);
    $categoryfiles = $scategoryfiles->getElementsByTagName('file');
    function getFiles($files){
    foreach($files as $file){
        $filevalue = $file->nodeValue;
        echo '<li>' . $filevalue . '</li>';
    }
    }
    switch($category){
    case 'Select a category or leave to get all the results':
        getFiles($subjectfiles);
    break;
    default:
        getFiles($categoryfiles);
    }
}

为什么不工作?我必须以某种方式转换对象吗?

谢谢!


修改

看起来问题是相对链接。我将其更改为http://localhost/Files.xml,似乎有效。无论如何,谢谢大家。

1 个答案:

答案 0 :(得分:1)

$ xpath-&gt; query($ subjectpath) - 不返回空的DOMNodeList,所以$ xpath-&gt;查询($ subjectpath) - &gt; item(0)返回null,然后当你调用$ ssubjectfiles-&gt ; getElementsByTagName('file'),$ ssubjectfiles为null,这里发生错误。

阅读手册http://www.php.net/manual/en/book.dom.php