用DOM解析PHP(无结果)

时间:2011-02-02 01:14:27

标签: php xml dom xpath xml-parsing

我正在尝试检索位于此span类属性中的正文文本。

<span id="" style="color:#525B64;">The quick brown fox jumped over the lazy dog.</span>

我在我的网络服务器上测试了它,但没有错误,但页面是空白的。我对此很新,所以我不知道从哪里开始。

这是我的代码。

<?php
// Load remote file, supress parse errors
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->loadHTMLFile('http://somewebpage.com');
libxml_clear_errors();

// use XPath to find all nodes with a class attribute of header
$xp = new DOMXpath($dom);
$nodes = $xp->query('//span[@class="msgBody"]');

// output first item's content
echo $nodes->item(0)->nodeValue;
?>

4 个答案:

答案 0 :(得分:3)

此代码中的一切似乎都很好。

我要做的是:

  • 删除导致解析错误的行。
  • 使用file_get_contents加载远程文件以查看其是否正确加载
  • 使用类似//*的XPath查询文档,并循环生成DOMNodeList(使用foreach)以查看树是否正确构建。

顺便说一下。为了抑制->loadHTMLFile()方法报告的解析错误,我使用@运算符。

答案 1 :(得分:1)

DOM创建用于外包的节点:属性,文本,注释,元素,您可以为其命名。所以你不是在追求span节点的值,即使它看起来像那样,你实际上想要在span中获取TextNode并获得值。尝试类似:

echo $nodes->item(0)->childNodes->item(0)->nodeValue

您也可以直接从xpath查询中获取此信息:

$nodes = $xp->query('//span[@class="msgBody"]/text()');

(虽然我个人从来没有幸运过xpath。)

答案 2 :(得分:1)

您确定要解析的文档中只有一个span个元素?

也许->item(0)返回空元素,列表中的下一个所需元素是什么?

答案 3 :(得分:1)

此类行为通常是由默认命名空间引起的(请检查是否存在与此类似的内容:xmlhs="http://www.w3.org/1999/xhtml")。

在XPath表达式中使用默认命名空间中的元素名称是xpath标记中最常见的FAQ - 只需搜索“ xpath default namespace ”即可找到许多好的答案。