<xsl:value-of select =“”>节点基于其子节点值</xsl:value-of>

时间:2012-09-30 23:09:42

标签: xslt

例如我有以下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>

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想输出一个特定的字符串,如:

  
      
  1. test xyz
  2.   

对于每个Letter,但您希望Letter元素根据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>

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

排序

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

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