我正在努力解决一个非常奇怪的问题。我有一个看起来像这样的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并覆盖这些值。
非常感谢任何帮助:)
答案 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中实现的方式