XSLT:如何在不按内容排序的情况下反转输出
我有一个项目列表:
<item>a</item>
<item>x</item>
<item>c</item>
<item>z</item>
我想要作为输出,
z
c
x
a
文件中没有订单信息,我只想反转这些行。源文件中的最后一行应该是输出中的第一行。如何使用 XSLT 解决此问题,而不按项目内容排序,这会给出错误的结果?
I have a list of items:
<item>a</item>
<item>x</item>
<item>c</item>
<item>z</item>
and I want as output
z
c
x
a
I have no order information in the file and I just want to reverse the lines. The last line in the source file should be first line in the output. How can I solve this problem with XSLT without sorting by the content of the items, which would give the wrong result?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我将展示两个 XSLT 解决方案:
I.具有递归功能的 XSLT 1.0 请注意,此解决方案适用于任何节点集,而不仅仅是在节点是同级节点的情况下:
此转换:
当应用于此 XML 文档时:
产生想要的结果:
II。 XSLT 2.0 解决方案:
当此转换应用于同一个 XML 文档时,会产生相同的正确结果。
I will present two XSLT solutions:
I. XSLT 1.0 with recursion Note that this solution works for any node-set, not only in the case when the nodes are siblings:
This transformation:
when applied on this XML document:
produces the wanted result:
II. XSLT 2.0 solution :
When this transformation is applied on the same XML document, the same correct result is produced.
XML 代码:
XSLT 代码:
注意: 如果您使用的是 data-type="number",并且任何值都不是数字,那些非数字值将排序在数字值之前。这意味着如果您使用 order="ascending",则非数字值首先出现;如果使用 order="descending",则非数字值显示在最后。
注意非数字值没有排序;它们只是按照遇到的顺序出现在输出文档中。
另外,您可能会发现阅读以下内容很有用:
XML CODE:
XSLT CODE:
note: if you're using data-type="number", and any of the values aren't numbers, those non-numeric values will sort before the numeric values. That means if you're using order="ascending", the non-numeric values appear first; if you use order="descending", the non-numeric values appear last.
Notice that the non-numeric values were not sorted; they simply appear in the output document in the order in which they were encountered.
also, you may find usefull to read this:
不确定完整的 XML 是什么样子,因此我将其封装在
元素中以使其格式良好:针对此样式表运行示例 XML:
生成请求的输出:
您可能需要调整xpath 与您的实际 XML 相匹配。
Not sure what the full XML looks like, so I wrapped in a
<doc>
element to make it well formed:Running that example XML against this stylesheet:
Produces the requested output:
You may need to adjust the xpath to match your actual XML.
XSLT:
以及结果:
The XSLT:
And the result: