XPathまたはXSLTであなたの助けが必要です。
私はどちらも初めてですが、今は最初は単純に思えるケースを解決する必要がありますが、何度も試した後、解決するのは難しいです:)
次の(簡略化された)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>
2 つ目は同じ 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
ような出力を生成したいと考えています。
出力: 2.1.1.1
ここで (順番に、左から右へ):
'2' = 'x2' node
'1' = 'a11' node
'1' = 'a1' node
'1' = 'a' node
現在、私が知っているのは、これらの XPath を使用して、現在のノード ID 番号を取得することだけです。これは 1 レベル上の親のみです。
count(./preceding-sibling::*) + 1
count(../preceding-sibling::*) + 1
しかし、親の ID 番号の残りの部分 (ある場合) を取得する方法がまだわかりません。XML のノードの深さのレベルはさまざまであり、ほとんどの場合、2 レベル以上の深さであるため、その可能性についても説明する必要があります。
私の質問が明確であることを願っています。
誰か解決策を教えてください。あなたの解決策についても説明していただければ、私のような初心者にとっても非常に役立ちます:)
ありがとうございました。