我正在尝试对以下数据进行排序。
<contents>
<content>
<id>
<text>
</content>
<relatedcontent>
<id>
<text>
</relatedcontent>
</contents>这只是简化的示例数据,但您可以理解其中的含义。它的两个不同的命名节点包含相同的结构。现在我已经创建了两个不同的模板来分别处理内容和相关内容,但排序也是分开进行的。有没有一种简单的方法来对ids上的内容和相关内容进行排序?假设<text>包含一个文本。我怎么能列出所有的<text>-elements的内容和相关的内容按id排序?
谢谢!
发布于 2011-01-13 16:33:48
试试这样的东西
<xsl:foreach select="//content | //relatedcontent">
<xsl:sort select="id" />
<xsl:value-of select="text" />
</xsl:foreach>我想解决方案在于使用联合运算符|将//content和//relatedcontent“连接”到单个节点集
发布于 2011-01-13 21:42:45
此转换显示了如何完成此操作
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<contents>
<xsl:apply-templates>
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</contents>
</xsl:template>
<xsl:template match="content">
Content Here
</xsl:template>
<xsl:template match="relatedcontent">
Relatedcontent Here
</xsl:template>
</xsl:stylesheet>在提供的XML文档上应用时(更正为格式良好):
<contents>
<content>
<id>3</id>
<text/>
</content>
<relatedcontent>
<id>2</id>
<text/>
</relatedcontent>
</contents>会生成所需的正确排序的结果
<contents>
Relatedcontent Here
Content Here
</contents>注意到
<xsl:for-each>的用法。唯一的联合是联合运算符的使用(是的,它被称为联合运算符,与pipes).id 上排序的第三个元素被添加到XPath文档中,此转换仍将在没有任何更改的情况下使用。https://stackoverflow.com/questions/4678046
复制相似问题