2

次の XML 構造を検討してください。

<a>
<b>
    <c>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="3"/>
        <d x="4"/>
    </c>
</b>
<b>
    <c>
        <d x="1"/>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="4"/>
        <d x="5"/>
        <d x="5"/>
    </c>
</b>
<b>
    <c>
        <d x="1"/>
        <d x="2"/>
        <d x="3"/>
        <d x="3"/>
        <d x="4"/>
        <d x="5"/>
        <d x="5"/>
    </c>
</b>

@x の最小値と最大値を示す XPath 1.0 ステートメントが必要ですか? これまでのところ、最小限の次のものがあります。

//a/b/c/d[not(前の兄弟::d/@x <= @x) and not(次の兄弟::d/@x <= @x)]/@x

これは近いですが、葉巻はありません:-(

どんな助けでも大歓迎です!

ありがとう、J

4

2 に答える 2

11

最大値を取得するには、小さい値がないすべての属性値を探します。複数の結果がある場合は、最初の結果を取得します-それらは等しくなければなりません。

(//@x[not(. < //@x)])[1]

最小値は、に置き換え<>ください。

完全性の理由から:XPathエンジンがXPath 2.0(またはそれ以上)をサポートしている場合は、おそらくより高速で読みやすいmax(//@x)敬意を使用してください。min(//@x)

于 2013-02-27T17:11:40.553 に答える
0

同様の問題を解決しました。ここでは、個々のネストされた for-each サイクルで要素を処理<b>し、各セクションで最大値を持つ最初の要素のコンテンツ<c>取得したいと考えていました。次のコードを使用しました。<d>x

<xsl:for-each select="/a/b">
  <!-- do something -->
  <xsl:for-each select="./c">
    <!-- do something -->
    <xsl:value-of select="((./d/@x[not(. &lt; ../../d/@x)])[1])/../." /> 
  </xsl:for-each>
</xsl:for-each>
于 2014-04-28T11:48:34.267 に答える