現在、XML ファイルの特定の要素を取得し、選択した要素の祖先をたどることによって、XML ファイルを複数の出力 XML ファイルに変換しようとしています。
例えば:
ソース XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<level_a>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
<level_e/>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_d>
<level_e/>
</level_d>
</level_d>
</level_c>
</level_b>
</level_a>
</root>
出力 XML ファイル:
1:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
2:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
3:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
<output level="e"/>
<output level="e"/>
</output>
</output>
</output>
</output>
4:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
</output>
次の XPath を使用して、シーケンスを生成する行で何かを実行できることを知っています。
(//level_d[not(level_d)])[last()]/ancestor::*[self::level_c|self::level_b]
それを foreach で繰り返すと、ドキュメントの順序で結果が得られます。
しかし、私が本当に興味を持っているのは、 foreach を使用せずに同じことを達成する方法です。私が考えることができる解決策は、すべての要素を逆に返すことです...
どんなヒントでも大歓迎です
よろしく
Vlax