什么会导致DOMNode :: nodeValue为空?

时间:2010-11-16 11:49:01

标签: php dom domdocument

我目前正在尝试使用DOMDocument解析文档,而且我遇到了一些严重的问题。我创建了一个在php 5.2.9上运行良好的脚本,使用DOMNode :: nodeValue删除内容。同样的脚本无法获得php 5.3.3上的任何内容 - 即使它正确导航到适当的节点以提取内容。

基本上,使用的代码如下所示:

$dom = new DOMDocument();
$dom->loadHTML($data);
$dom->preserveWhiteSpace = false; 
$xpath = new DOMXpath($dom);
$nodelist = $xpath->query($query);
$value = $nodelist->item(0)->nodeValue;

我已经检查过以确保item(0)实际上是一个节点 - 它就在那里,甚至是正确的类型,但是nodeValue是空的。

该脚本适用于某些文档,但不适用于其他文档(5.3.3) - 在5.2.9上,它适用于所有文档,返回正确的nodeValue。

1 个答案:

答案 0 :(得分:2)

我似乎错过了一些基本和/或错误的东西(尽管如果错误是在php或libxml我不知道)。基本上,通过确保使用loadHTML加载的数据是UTF-8编码来解决该问题。请注意,这不是整个文档需要UTF-8编码 - 这里的问题是元素中有一个字符不是UTF-8。然后在文档处理中抛弃了其他所有内容。

让我感到惊讶的是,这基本上意味着所有文档内容都被抛弃了 - 但结构已经正常运行。没有错误或任何暗示内容被视为无效的内容。