DOMDocument getNodeValue() 返回 null(包含输出转义字符串)

Posted

技术标签:

【中文标题】DOMDocument getNodeValue() 返回 null(包含输出转义字符串)【英文标题】:DOMDocument getNodeValue() returns null (contains an output escaped string) 【发布时间】:2012-09-06 23:10:03 【问题描述】:

我正在处理一个 DomDocument,它基本上是 SOAP Web 服务的 XML 结果。 给你一个想法,这就是它的样子

...<ParentNode><ChildNode>&lt;output&gt;&lt;escaped&lt;string</ChildNode></ParentNode>...

是的,ChildNode 的值是一个已转义输出的字符串,是封装在此 XML 中的 XML。我做通常的 DomDocument 处理,例如

NodeList rows = dom.getElementsByTagName(ChildNode);
for(int i=0;i<rows.length;i++)

  System.out.println(rows[i].getParentNode()); // returns ParentNode
  System.out.println(rows[i].getNodeName()); // returns ChildNode
  System.out.println(rows[i].getNodeValue()); // returns null

检查上面的代码后,您会发现即使节点为 ParentNode 和 NodeName 节点返回了正确的值,但在访问 getNodeValue() 时它返回一个空值。这里有一个字符串,我可以在控制台输出中看到它。但我不确定我在这里缺少什么技巧,输出转义是否以任何特定方式搞砸了?

谢谢, 帕里贾特

【问题讨论】:

【参考方案1】:

您想要 getTextContent() 而不是 getNodeValue() - 后者总是为元素节点返回 null。

【讨论】:

我同时使用了 rows[i].getChildNodes().rows[i].getNodeValue();它奏效了......我想知道为什么 因为&lt;ChildNode&gt;元素下的子节点是文本节点,其节点值为它们包含的文本,而不是元素节点,其节点值始终为null . Node 类型的 getTextContent() 方法未定义 @Ian Robers,当节点文本包含 、 等 html 标签时如何使用 getTextContent。【参考方案2】:

代替

rows[i].getNodeValue()

使用

rows[i].getNodeValue().getChildNodes().item(0).getNodeValue()

【讨论】:

以上是关于DOMDocument getNodeValue() 返回 null(包含输出转义字符串)的主要内容,如果未能解决你的问题,请参考以下文章

防止 DOMDocument::loadHTML() 转换实体

DOMDocument::loadHTML(): 由于输入错误,输入转换失败

在原始 DOMDocument 被销毁后访问导入的元素

DOMDocument无法解析XML

PHP DOMDocument 添加了额外的标签

在 PHP 中使用 DOMDocument 缩进