0

次の XML 構造があります。

<someSubNodeInXmlFile text="mainListStart">
    <a text="text1">
        <b text="text2">
            <a text="text3">
                <c text=""text4/>
            </a>
            <a text="text5"/>
        </b>
    </a>
    <a text="text6">
        <c text="text7"/>
    </a>
</someSubNodeInXmlFile>

私の問題は、番号付けについてです。上記の XML は、ネストされたリストとして見ることができます。

番号付けのデフォルトの形式は '1.1.1', level="multiple" です。ただし、リストが 4 回以上入れ子になっている場合は、フォーマットを '1', level="single" に変更する必要があります。

上記の構造の望ましい出力は次のようになります。

1. mainListStart
    1.1 text1
        1.1.1 text2
            1   text3
                1   text4
            2   text5
    1.2 text6
        1.2.1 text7

私の意見では、たとえば、現在のノードが最初の場合、現在のノードと親の間の先祖の数を計算する必要があります。計算された数値が 4 未満の場合は、リスト項目の形式として「1.1.1」を使用し、それ以外の場合は形式として「1」を使用します。

私は今いくつかのことを試しましたが、どれもうまくいきませんでした。一般に、現在のノードの祖先の数を計算できますが、これは完全な祖先ツリーを計算しており、特定のノード「someSubNodeInXmlFile」までではありません。

これは単純な xpath 式で可能ですか、それとも current() から始まる再帰テンプレートを使用して数値を計算し、必要な場合は次の祖先を探し、そうでない場合は数値に 1 を追加して次の祖先に進みますか? ?

後者のアイデアはあまりパフォーマンスが高くないことが想像できます (まったく機能する場合)。しかし、最善の解決策は何ですか?

前もって感謝します。

BRgrds、イェンス

4

1 に答える 1

1

ノードのすべての先祖の数を取得する方法がわかっている場合は、先祖の数を差し引くだけでsomeSubNodeInXmlFile、その間のノードの数 (プラス 1) が得られます。

R---o---o---X---o---o---o---o---o---N
            3                       9
            \_______________________/
                  9 - 3 - 1 = 5
于 2016-02-23T15:06:12.470 に答える