1
考慮下面的XML:爲什麼這個xsl:sort selector沒有工作?
<?xml version="1.0"?>
<Things>
<Thing>
<Thing ID="0002"/>
<Name>Bob</Name>
</Thing>
<Thing>
<Thing ID="0003"/>
<Name>Alice</Name>
</Thing>
<Thing>
<Thing ID="0001"/>
<Name>Carol</Name>
</Thing>
</Things>
我要輸出由ID屬性分類相同的XML。下面的樣式表做我想要的。註釋掉的xsl:sort
(以及我試過的幾個變體)不起作用 - 我只是得到原始文檔的未分類副本。 (並且沒有錯誤消息。)
如何特別選擇Thing元素上的ID屬性(以避免在可能存在於更大文檔中的其他元素上使用ID屬性)?
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="Things">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="*/@ID" data-type="number"/>
<!-- I don't understand why this doesn't work:
<xsl:sort select="Thing/Thing[@ID]" data-type="number"/>
-->
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
感謝您的解釋。 – bstpierre 2011-05-25 20:48:19
+1正確答案。爲了進一步解釋,@bst,「Thing/@ ID」和「Thing [@ID]」之間的區別在於前者意味着「Thing」元素的「ID」屬性,而後者意味着「一個」具有'ID'屬性'的東西'元素(爲了簡化而對一些小細節進行了修飾)。 – LarsH 2011-05-25 20:51:04