0

我目前正在努力解决一个非常奇怪的问题。我有一个如下所示的 XML:

<A>
  <B>
    <C>
      <D>
       <E attribute="foo">
         This is a value
       </E>
      </D>
    </C>
  </B>
</A>

现在,当我执行 XPath-Query 并遍历结果时,我总是将值“这是一个值”作为节点 A 的值,这是不正确的(该值应该只是节点 E 的值)。

这里出了什么问题?好像在说 A->childNodes 时,它递归地获取所有 childNodes 并覆盖值。

任何帮助将不胜感激:)

4

1 回答 1

1

$node->nodeValue 的处理程序dom_node_node_value_read是在ext/dom/node.c中实现的。
它调用libxml2 的 xmlNodeGetContent()函数。

读取节点的值,可以是该节点直接携带的文本(如果它是 TEXT 节点)或该节点子节点(TEXT 和 ENTITY_REF)携带的值的聚合字符串。实体引用被替换。
即对于 DOMElement,您将所有子元素的所有值作为一个字符串。如果我没记错的话,
那不是http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1841493061所说的......但这就是它的实现方式在 libxml2/php

于 2012-08-14T09:02:05.337 回答