什么会导致 DOMNode::nodeValue 为空?
Posted
技术标签:
【中文标题】什么会导致 DOMNode::nodeValue 为空?【英文标题】:What would cause DOMNode::nodeValue to be empty? 【发布时间】:2011-05-10 18:37:40 【问题描述】:我目前正在尝试使用 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。
【问题讨论】:
我发现这样的问题与捆绑不同 libxml 版本的不同 PHP 版本一起使用,所以不要丢弃它只是一个错误。但是,重现问题的示例文档可能有助于诊断。 【参考方案1】:我似乎遗漏了一些基本的和/或错误(虽然我不知道错误是在 php 还是 libxml 中)。基本上,通过确保使用 loadHTML 加载的数据是 UTF-8 编码来解决这个问题。请注意,不是整个文档都需要进行 UTF-8 编码——这里的问题是元素中有一个字符不在 UTF-8 中。然后,文件处理中的所有其他内容都被抛弃了。
让我明白的是,这基本上意味着所有文档内容都被丢弃了 - 但结构正常工作。没有错误或任何暗示内容被视为无效的内容。
【讨论】:
以上是关于什么会导致 DOMNode::nodeValue 为空?的主要内容,如果未能解决你的问题,请参考以下文章