我想根据特定属性的值对XML文档的子元素进行排序。
这是test.xml文档:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="sort.xsl"?>
<resources>
<string name="zero">test</string>
<string name="alfa">test</string>
<string name="foxtrot">test</string>
<string name="golf">test</string>
</resources>
这是sort.xsl:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="resources">
<assembly>
<xsl:apply-templates select="string">
<xsl:sort select="@name" order="ascending" data-type="text" />
</xsl:apply-templates>
</assembly>
</xsl:template>
</xsl:stylesheet>
据我所知,这应匹配string
元素下的所有resources
元素,并尝试按字母顺序对它们进行排序,这将产生以下输出:
<resources>
<string name="alfa">test</string>
<string name="foxtrot">test</string>
<string name="golf">test</string>
<string name="zero">test</string>
</resources>
它不起作用。这是我写过的第一个XSL转换。我正在使用XML Notepad 2007,并且在我的XSL输出屏幕中没有显示任何内容。没有解析错误,只是一个空白屏幕。我这样做完全错了吗?我试图找到here找到的代码。
答案 0 :(得分:2)
您正在按排序顺序处理字符串元素,但您没有匹配它们的模板,因此请添加
<xsl:template match="string">
<xsl:copy-of select="."/>
</xsl:template>
或者如果您还需要处理其他节点,则复制节点的通用模板。
答案 1 :(得分:2)
我的XSL输出屏幕中没有显示任何内容。没有解析错误,只是 一个空白的屏幕。
如果输出中没有显示任何内容,则问题不在于排序。应用于输入时,样式表应产生以下结果:
<?xml version="1.0"?>
<assembly>testtesttesttest</assembly>
这可能不是您期望的结果 - 但它不是空白,因此在抛光样式表之前,请查看启动转换的方式中的错误。
-
顺便说一句,虽然很难看到,结果中的那4个测试字符串按父字符串的name属性排序。