-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

对于每个 Letter,但您希望根据 DisplayOrder 的数值对 Letter 元素进行排序。

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>

我建议你 RTFM 关于 xsl:sort 在http://www.w3.org/TR/xslt20/#xsl-sort

我的代码假设 LetterProductInfo/Paragraph/DisplayOrder 只返回 1 个节点。

注意:对于您的下一个问题,您可能希望更具体地了解您期望的输出。例如,我假设您只想要字符串而不是 HTML。

于 2012-10-01T07:29:58.323 回答