例如我有以下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>
感谢。
答案 0 :(得分:0)
如果我理解你的问题,你想输出一个特定的字符串,如:
- test xyz
醇>
对于每个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,例如。