-2

たとえば、次のxml入力があります。

<Letter>
  <LetterProductInfo>
    <Paragraph>
        <DisplayOrder>
            20
        </DisplayOrder>
        <Text>
            text abc
        </Text>
    </Paragraph>
  </LetterProductInfo>
</Letter>

<Letter>
    <LetterProductInfo>
    <Paragraph>
        <DisplayOrder>-10</DisplayOrder>
        <Text>
            text kkk
        </Text>
    </Paragraph>
  </LetterProductInfo>
</Letter>

<Letter>
   <LetterProductInfo>
    <Paragraph>
        <DisplayOrder>-20</DisplayOrder>
        <Text>
            text xyz
        </Text>
    </Paragraph>
  </LetterProductInfo>
</Letter>

xslを記述して、すべての文字ノードをループし、DisplayOrderの値に基づいてテキストを選択するようにするためのヘルプが必要です[displayorder IDが何になるかわからないため、ハードコーディングできません。わかっているのは、それだけです。整数値]

何かのようなもの:

<xsl:for-each select="Letter">
   <!--
   missing logic so that xsl:value-of select="?" will print
   1. test xyz - because its DisplayOrderId is -20
   2. text kkk - because its DisplayOrderId is -10
   3. text abc - because its DisplayOrderId is 20
    -->
</xsl:for-each>

ありがとう。

4

1 に答える 1

0

あなたの質問をよく理解できれば、次のような特定の文字列を出力したいと考えています。

  1. テスト xyz

ただし、DisplayOrder の数値に基づいて文字要素を並べ替える必要があります。

xsl:sort はあなたのためにそれを行います:

<xsl:for-each select="Letter">
  <xsl:sort select="number(LetterProductInfo/Paragraph/DisplayOrder)"
    data-type="number"/>
  <!-- your code for processing a Letter goes here -->
</xsl:for-each>

または、次のこともできます。

<xsl:apply-templates select="Letter">
  <xsl:sort select="number(LetterProductInfo/Paragraph/DisplayOrder)"
    data-type="number"/>
  <!-- your code for processing a Letter goes into a separate xsl:template -->
</xsl:apply-templates>

http://www.w3.org/TR/xslt20/#xsl-sortで xsl:sort について RTFM することをお勧めします

ここでのコードは、LetterProductInfo/Paragraph/DisplayOrder によって返されるノードが 1 つだけであることを前提としています。

注意: 次の質問では、出力として何を期待するかをより具体的にしたいと思うかもしれません。たとえば、HTMLではなく文字列だけが必要だと思います。

于 2012-10-01T07:29:58.323 に答える