什么会导致DOMNode :: nodeValue为空?
问题描述:
我目前正在尝试使用DOMDocument解析文档,并且遇到了一些严重问题。我创建了一个在php 5.2.9上运行良好的脚本,使用DOMNode :: nodeValue来取出内容。同样的脚本在php 5.3.3上没有获得任何内容 - 即使它正确地导航到正确的节点来提取内容。什么会导致DOMNode :: nodeValue为空?
基本上,所用的代码如下所示:
$dom = new DOMDocument();
$dom->loadHTML($data);
$dom->preserveWhiteSpace = false;
$xpath = new DOMXpath($dom);
$nodelist = $xpath->query($query);
$value = $nodelist->item(0)->nodeValue;
我检查,以确保该项目(0)实际上是一个节点 - 它甚至正确类型的存在,但的nodeValue是空。
该脚本适用于某些文档,但不适用于其他文档(关于5.3.3) - 关于5.2.9它适用于所有文档,返回正确的nodeValue。
答
我似乎错过了一些基本的和/或一个错误(虽然如果错误是在PHP或libxml我不知道)。基本上,通过确保使用loadHTML加载的数据是UTF-8编码来解决问题。请注意,并非整个文档需要使用UTF-8编码 - 这里的问题是元素中没有UTF-8中的字符。然后在文档处理中抛弃其他所有内容。
我得到的是,这基本上意味着所有的文档内容都被抛出了 - 但结构正常工作。没有错误或任何建议的内容被视为无效。
我发现这样的问题与不同的PHP版本捆绑不同的libxml版本,所以不要丢弃它只是一个错误。但是,重现问题的示例文档可能有助于诊断。 – 2010-11-16 12:03:12