PHP DOMNode值

时间:2012-08-14 07:38:47

标签: php xml dom xpath

我正在努力解决一个非常奇怪的问题。我有一个看起来像这样的XML:

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

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

这里出了什么问题?似乎在说A-&gt; childNodes时,它会递归获取所有childNodes并覆盖这些值。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

$ node-&gt; nodeValue的处理程序为dom_node_node_value_read,这在ext/dom/node.c中是必不可少的。
它调用libxml2's xmlNodeGetContent()函数。

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