您好 我需要xsl获取元素数组(在“ - 之前,如果存在的话)。
xml是
<Cars>
<Car Trunck="511"/>
<Car Trunck="483-20"/>
<Car Trunck="745"/>
</Cars>
xsl是
<xsl:variable name="testarr">
<xsl:for-each select="//Cars//Car/@Trunck">
<xsl:value-of select="number(substring(.,1,3))" />
</xsl:for-each>
</xsl:variable>
(我想所有的数字都是三位数,如果有人知道所有条件的解决方案都会很高兴听到提案) 如果我这样做 我得到一行中的所有数字:511483745 我需要把它们放在阵列中 因为我也需要得到最大值
感谢
答案 0 :(得分:2)
嗨,我需要获取元素数组 (在“ - ”之前如果存在的话)[...]我需要得到 他们在阵列中,因为我也需要得到 最大值
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/Cars/Car/@Trunck">
<xsl:sort select="concat(substring-before(.,'-'),
substring(., 1 div not(contains(.,'-'))))"
data-type="number" order="descending"/>
<xsl:if test="position()=1">
<xsl:value-of
select="concat(substring-before(.,'-'),
substring(.,1 div not(contains(.,'-'))))"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
745
XPath 2.0一行:
max(/Cars/Car/@Trunck/number(replace(.,'-.*','')))
答案 1 :(得分:1)
您可以使用substring-before
和substring-after
函数:查看优秀的ZVON教程
http://zvon.org/xxl/XSLTreference/Output/function_substring-after.html
在您的示例中,您只提取连接的值(字符串)。也许你需要将结果包装在你自己的元素中
<xsl:for-each select="//Cars//Car/@Trunck">
<truck>
<xsl:value-of select="number(substring(.,1,3))" />
</truck>
</xsl:for-each>
答案 2 :(得分:0)
虽然你有两个很好的答案(特别是@Alejandro的答案),但我认为这是一个更好的答案:
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pTopNums" select="2"/>
<xsl:template match="/*">
<xsl:apply-templates select="*">
<xsl:sort data-type="number" order="descending"
select="substring-before(concat(@Trunck,'-'),'-')"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Car">
<xsl:if test="not(position() > $pTopNums)">
<xsl:value-of select=
"substring-before(concat(@Trunck,'-'),'-')"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档(最初提供的文档,略微更改为更具挑战性):
<Cars>
<Car Trunck="483-20"/>
<Car Trunck="311"/>
<Car Trunck="745"/>
</Cars>
生成所需的正确结果(问题中指定的@Trunck
派生的前两位数字):
745
483