【问题标题】:Why is this xPath query in PHP not working?为什么 PHP 中的这个 xPath 查询不起作用?
【发布时间】:2012-10-26 19:50:44
【问题描述】:

我是 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,它似乎工作。总之谢谢大家。

【问题讨论】:

  • 根节点下可能没有主题,但是你能显示你的XML吗?
  • @Gordon 看起来像。您可以在对它们进行任何其他操作之前尝试打印每个查询的结果。

标签: php xpath xml-parsing domxpath


【解决方案1】:

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

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

【讨论】:

  • 谢谢!那么就是说没有找到节点?
  • 是的,请检查此列表是否为空,并且您不会在此行中收到错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多