什么会导致 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 为空?的主要内容,如果未能解决你的问题,请参考以下文章

什么会导致 GPIB 无响应

什么会导致 Chrome 保存的密码失败?

为啥无限递归会导致段错误

什么会导致 OdbcDataReader 挂起?

什么会导致 sock send() 命令出现“资源暂时不可用”

什么条件会导致 UITapGestureRecognizer 失败但 touchesBegan 成功?