【发布时间】:2015-12-13 16:23:25
【问题描述】:
在 python 上使用 xslt 1.0,我试图在指定顺序时选择一些项目:
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item name='1'>
first
</item>
<item name='2'>
second
</item>
<item name='3'>
third
</item>
</items>
如果我使用带有大 OR'd together 列表的 for-each,我可以获得我想要的项目,但只能按照上面 xml 源文档的原始顺序。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="items/item[@name='2']|items/item[@name='1']">
<p>hi</p>
<xsl:value-of select="." />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这会产生:
hi
first
hi
second
但我想让它输出:
hi
second
hi
first
我认为使用 xsl:apply-templates 可能是可行的方法,但即使是这个简单的示例,我也无法使用它。 xslt 1.0 中按特定顺序选择元素的最佳方式是什么?
【问题讨论】:
-
查看 har07 给您的答案(与两个
apply-templates),您使用的联合运算符|按文档顺序对其操作数进行排序,因此您对select="items/item[@name='2']|items/item[@name='1']"的尝试未定义顺序for-each,随心所欲。在 XSLT 2.0 中,您可以使用逗号运算符,,就像在select="items/item[@name='2'],items/item[@name='1']"中一样,但 XSLT 1.0 没有该运算符。