我是XSLT的新手,虽然到目前为止我已经成功完成了许多任务......排序让我很难过。
我需要一个小例子的帮助,这样我才能理解xsl:排序更好。
我的xml数据如下所示:
<NewTerms>
<newTerm>Zebra</newTerm>
<newTerm>Horse</newTerm>
<newTerm>Cat</newTerm>
<newTerm>Lion</newTerm>
<newTerm>Jaguar</newTerm>
<newTerm>Cheetah</newTerm>
<newTerm>Deer</newTerm>
<newTerm>Buffalo</newTerm>
<newTerm>Dog</newTerm>
</NewTerms>
我只想简单地从xsl表中按字母顺序对它们进行排序。我写的xsl(&amp;不工作)如下:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="NewTerms">
<xsl:apply-templates>
<xsl:sort select="newTerm"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
我非常确定我还没有理解xsl:sort函数是怎样的。如果你帮助我完成这个小小的例子......我想我会更好地理解它。
谢谢。
茉莉
答案 0 :(得分:5)
我假设你想要一个有效的XML结构作为输出,因为在你的<xsl:output>
中,方法是“XML”。
你可以试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
给出了这个输出:
<?xml version="1.0" encoding="UTF-8"?>
<NewTerms>
<newTerm>Buffalo</newTerm>
<newTerm>Cat</newTerm>
<newTerm>Cheetah</newTerm>
<newTerm>Deer</newTerm>
<newTerm>Dog</newTerm>
<newTerm>Horse</newTerm>
<newTerm>Jaguar</newTerm>
<newTerm>Lion</newTerm>
<newTerm>Zebra</newTerm>
</NewTerms>
这对你有帮助吗?
您还可以查看排序的定义,例如: http://www.w3schools.com/xsl/el_sort.asp http://www.w3.org/TR/xslt#sorting
祝你好运, 彼得
答案 1 :(得分:2)
<xsl:template match="NewTerms"> <xsl:apply-templates> <xsl:sort select="newTerm"/> </xsl:apply-templates> </xsl:template>
我很确定我没有 了解xsl:sort函数
的方式
你是对的。来自http://www.w3.org/TR/xslt#sorting
xsl:sort
具有select
属性 其值是表达式。 每个人 要处理的节点,表达式 使用该节点评估 当前节点和完整的 正在处理的节点列表 未排序的顺序作为当前节点 list。 * 生成的对象是 转换为字符串,就像通过调用一样 到string
函数;这个 string用作排序键 那个节点。默认值select
属性为.
导致当前的字符串值 节点用作排序键。
*强调我的。
你想:
<xsl:template match="NewTerms">
<xsl:apply-templates>
<xsl:sort/>
</xsl:apply-templates>
</xsl:template>