0

次のようなxml構造があります。

<document>
    <body>
        <section>
            <title>something</title>
            <subtitle>Something again</subtitle>
            <section>
                <p xml:id="1234">Some text</p>
                <figure id="2121"></figure>
                <section>
                    <p xml:id="somethingagain">Some text</p>
                    <figure id="939393"></figure>
                    <p xml:id="countelement"></p>
                </section>
            </section>
        </section>
        <section>
            <title>something2</title>
            <subtitle>Something again2</subtitle>
            <section>
                <p xml:id="12345678">Some text2</p>
                <figure id="939394"></figure>
                <p xml:id="countelement2"></p>
            </section>
        </section>
    </body>
</document>

<p xml:id="countelement"></p>XPath を使用して要素の前にある図形要素をカウントするにはどうすればよいですか?

編集: そして、親セクション内の図要素のみをカウントしたいのですが、次のセクションでは再び0から開始する必要があります。

4

2 に答える 2

1

XPath 2.0 互換エンジンを使用している場合は、count 要素を見つけて、fn:count()先行するすべての図要素を入力として使用してそれぞれを呼び出します。

これは、同じレベルの各「countelement」に先行する数字の数を返します (これが実際に必要なものだと思います):

//p[@xml:id="countelement"]/count(preceding-sibling::figure)

これは、各「countelement」の前の数字の数と上のレベルを返します。

//p[@xml:id="countelement"]/count(preceding-sibling::figure | parent::*/preceding-sibling::figure)

これは、各「countelement」と上のレベルの前にある先行するすべての数字の数を返します。

//p[@xml:id="countelement"]/count(preceding::figure)

XPath 1.0にバインドされている場合、複数の結果を取得することはできません。本当に id である (したがって一意である)場合@id、次のクエリを使用できます。

count(//p[@xml:id="countelement"]/preceding::figure)

要素ではない「countelements」がある場合は、に<p/>置き換えます。p*

于 2013-02-18T14:16:05.577 に答える
0

count(id("countelement")/preceding-sibling::figure)

xml:id「countelement」のように、2つの異なる要素の属性を同じ値にすることはできないことに注意してください。2つの異なる要素に、同じ値「countelement」を持つ同じ名前の属性を持たせたい場合は、DTD属性タイプIDではない他の属性(おそらく「種類」)である必要があります。その場合、id("countelement")あなたの代わりにを使用します*[@kind="countelement"]

于 2013-02-18T13:48:38.000 に答える