如何才能找到XSL三个数字的最大? 更多信息:我有三个数字说,1.0,2.0,5.0 ....我没有任何节点设置不......我想找到最大的1.0,2.0和5.0 .....
例如:
AIM : TO know which type of node <MYNODE>, <DOC>, <PIC>
is having maximum count and whant's the count number ?
<ROOT>
<MYNODES>
<MYNODE>A</MYNODE>
<MYNODE>B</MYNODE>
<MYNODE>C</MYNODE>
<MYNODE>D</MYNODE>
</MYNODES>
<DOCS>
<DOC>1</DOC>
<DOC>2</DOC>
<DOC>3</DOC>
</DOC>
<PICS>
<PIC>a.jpeg</PIC>
<PIC>b.jpeg</PIC>
<PIC>c.jpeg</PIC>
<PIC>d.jpeg</PIC>
<PIC>e.jpeg</PIC>
</PICS>
</ROOT>
这个问题不正确制定和提供的“XML文档”没有很好地形成!
请注意, 这是通常意义的询问,最大的一组数字的 。 可以有多个号码与最高值。 因此,下面的解决方案,只显示与最大值的第一个项目。
这是一种可能的XSLT 1.0溶液 :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="vNameMaxCount">
<xsl:for-each select="*/*">
<xsl:sort select="count(*)" data-type="number"
order="descending"/>
<xsl:if test="position() = 1">
<xsl:value-of select="concat(name(),'+', count(*))"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
One element with maximum children is: <xsl:text/>
<xsl:value-of select="substring-before($vNameMaxCount, '+')"/>
Maximum number of children: <xsl:text/>
<xsl:value-of select="substring-after($vNameMaxCount, '+')"/>
</xsl:template>
</xsl:stylesheet>
当在下面的XML文档被应用于上述的转化 (从花10分钟至使其非常形成之后提供一个产生!):
<ROOT>
<MYNODES>
<MYNODE>A</MYNODE>
<MYNODE>B</MYNODE>
<MYNODE>C</MYNODE>
<MYNODE>D</MYNODE>
</MYNODES>
<DOCS>
<DOC>1</DOC>
<DOC>2</DOC>
<DOC>3</DOC>
</DOCS>
<PICS>
<PIC>a.jpeg</PIC>
<PIC>b.jpeg</PIC>
<PIC>c.jpeg</PIC>
<PIC>d.jpeg</PIC>
<PIC>e.jpeg</PIC>
</PICS>
</ROOT>
有用结果产生
One element with maximum children is: PICS
Maximum number of children: 5
一个XSLT 2.0溶液(实际上只是一个XPath 2.0 soulution):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select=
"for $vmaxChildrein in max(/*/*/count(*)),
$vmaxNode in */*[count(*) = $vmaxChildrein][1]
return
(name($vmaxNode),
'has the max no of children:',
$vmaxChildrein
)
"/>
</xsl:template>
</xsl:stylesheet>
当在上述文件应用该变换中,所需的结果是产生的:
PICS has the max no of children: 5
用于找到最大更加棘手性能不能立即表示作为XPath表达式和所用的 <xsl:sort>
, 却使用了f:maximum()
FXSL的功能。
有了您输入XML,你会发现你正在寻找这样的最大计数:
<xsl:variable name="vMaxChildren">
<xsl:for-each select="/ROOT/*">
<xsl:sort select="count(*)" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="concat(name(), ': ', count(*))" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$vMaxChildren" />
这将产生:
PICS: 5
5.0是最大的三个数字。 硬编码,并用它做。 :-)
说正经的,你不妨采取另一种路径。 这样的逻辑在其他语言的琐碎,但可以在XSLT痛苦。 你应该考虑写XSLT引擎的简单扩展,而不是瞎搞试图使XSLT你希望它是什么。