我无法生成有效的 XPath 1.0 等效于一个工作 2.0 示例,它会产生相同的结果(事实上,不会失败)。我必须使用以前版本的原因是 PHP 不支持 XPath 2.0。
我的 xml 看起来像:
<root>
<container id="1">
<elements>
<element value="0"/>
</elements>
</container>
<container id="2">
<elements>
<element value="1"/>
</elements>
</container>
<container id="3">
<elements>
<element value="1"/>
</elements>
</container>
</root>
我想获取节点的value
属性element
,其中祖父container
节点的属性id
等于 1 或 3。我还想获取与相应属性连接的上述 idelement
value
属性。如果前两个语句不完全可读(这些天我的英语有点生疏),这就是我想要实现的目标:
1:0
3:1
格式为:
[container id]:[element value]
我编写的工作 XPath 2.0 路径给出了预期的结果:
//container[@id=1 or @id=3]//element/concat(../../@id, ":", @value)
但是,使用XPath 1.0 测试器运行它会导致以下错误:
ERROR - Failed to evaluate XPath expression: Unknown nodetype: concat
这让我感到困惑,因为 concat 存在于XPath 1.0 规范中。
我尝试使用不同的方法,例如使用这样的路径:
//container[@id=1 or @id=3]/@id | //container[@id=1 or @id=3]//element/@value
这给出了这样的结果集:
1
0
3
1
我可以有问题地解析它以实现预期的格式,但我不确定联合是否会正确配对相应id
的value
。谁能指出我正确的方向?