需要您的帮助XPath或XSLT。从当前节点检索逻辑父节点ID
我是新来的两个人,但现在我必须解决这个听起来像在第一时间简单,但这么多的尝试后,硬的情况下,为我解决:)
我有以下(简化)XML。
首先, “干净” 之一:
<root>
<a>
<a1>
<a11>
<x1>111</x1>
<x2>222</x2>
<x3>333</x3>
</a11>
</a1>
</a>
<b>
<b1>
<b11>
<b111>
<x2>777</x2>
<x3>888</x3>
</b111>
</b11>
</b1>
</b>
</root>
,第二个,相同的XML但更多的 “逻辑” ID号。这些ID有助于稍后对结果进行交叉检查,它们物理上不存在于XML中。
<root>
1 <a>
1 <a1>
1 <a11>
1 <x1>111</x1>
2 <x2>222</x2>
3 <x3>333</x3>
</a11>
</a1>
</a>
2 <b>
1 <b1>
1 <b11>
1 <b111>
1 <x2>777</x2>
2 <x3>888</x3>
</b111>
</b11>
</b1>
</b>
</root>
我的目标是,检索当前节点的逻辑ID号和所有它的父母,祖父母...等(除“根”节点)的顺序,从当前节点开始。
例如,如果我的当前节点位置是在root/a/a1/a11/x2
,然后我想以产生输出similiar这样的:
输出:2.1.1.1
其中(在序列,左到右):
'2' = 'x2' node
'1' = 'a11' node
'1' = 'a1' node
'1' = 'a' node
现在,我只知道要获得当前节点的ID号,它是一个父级以上只,通过使用这些的XPath :
count(./preceding-sibling::*) + 1
count(../preceding-sibling::*) + 1
但我仍然无法弄清楚如何获得它的父母身份证号码的其余(如果有的话)。由于XML的节点深度级别不同,并且大部分时间都超过了2级深度,所以我必须也覆盖这种可能性。
我希望我的问题很清楚。
请问,有人有解决方案吗?对于像我这样的初学者来说,这非常有帮助,如果你可以对你的解决方案给出一些解释:)
谢谢。
谢谢您的回应!现在我要用我的实际数据尝试解决方案。结果我很快就会回来。 –
您的解决方案适用于我。我已经根据我的实际XML数据对其进行了测试,修改代码以进行一些调整以适应我的需要并且工作。非常感谢你。非常感谢。案件关闭。 –