hak*_*kre 8 php xpath libxml2 domdocument
对于另一个问题,我创建了一些与我的开发机器相关的XML相关代码,但在viper键盘上没有,我在测试之前将其添加到我的答案中.
我可以将我的问题减少到DOMXPath::query()我的系统和键盘之间返回的节点顺序不同.
XML: <test>This is some <span>text</span>, fine.</test>
当我查询所有文本节点时//child::text(),结果不同:
#0: This is some
#1: , fine.
#2: text
Run Code Online (Sandbox Code Playgroud)
我的机器:
#0: This is some
#1: text
#2: , fine.
Run Code Online (Sandbox Code Playgroud)
我不熟悉xpath,我确实理解为什么会发生这种情况以及如何使用PHP实现来影响返回顺序.
编辑:
进一步测试显示LIBXML_VERSION两个系统之间存在差异:
Viper Codepad: 20626 (2.6.26; 6 Jun 2006)
My Machine...: 20707 (2.7.7; 15 Mar 2010)
Run Code Online (Sandbox Code Playgroud)
从技术上讲,XPath 1.0返回节点集而不是节点序列.在XPath 1.0规范中,没有关于这些节点集的顺序的陈述 - 事实上,作为集合,它们没有内在的顺序.
但是,XSLT 1.0始终按文档顺序处理XPath 1.0返回的节点集,并且由于该先例,人们普遍期望当从XSLT以外的语言调用XPath时,XPath结果将按文档顺序排列.但是,规范中没有任何内容可以保证这一点.在XPath 2.0中,用户期望成为规范的一部分,路径表达式的结果必须按文档顺序排列.
我可以找到以下错误报告,它看起来像这个问题:Bug 363252 - libxml2's xmlXPathEvalExpression() 中的接近位置报告于 2006 年 10 月 18 日,并确认自 2006 年 5 月以来,这是在相关的 2.6.26 版本之前。
这应该已在 libxml2 2.6.27 中修复。
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |