2010-11-16 124 views
1

我目前正在尝试使用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。

+0

我发现这样的问题与不同的PHP版本捆绑不同的libxml版本,所以不要丢弃它只是一个错误。但是,重现问题的示例文档可能有助于诊断。 – 2010-11-16 12:03:12

回答

1

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

我得到的是,这基本上意味着所有的文档内容都被抛出了 - 但结构正常工作。没有错误或任何建议的内容被视为无效。