[英]XSLT 1.0 sort elements
我有以下XML文檔:
<?xml version="1.0" encoding="UTF-8"?>
<objects>
<object>Clutch</object>
<object>Gearbox</object>
<object>Cylinder head</object>
<object>Starter</object>
<object>Airbox</object>
<object>Inlet manifold</object>
</objects>
以下是XSLT文檔:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="objects">
<parts>
<xsl:apply-templates>
<xsl:sort select="object"/>
</xsl:apply-templates>
</parts>
</xsl:template>
<xsl:template match="object">
<part>
<xsl:apply-templates/>
</part>
</xsl:template>
</xsl:stylesheet>
應用時,我按預期獲得以下輸出,但它沒有被排序:
<?xml version="1.0" encoding="UTF-8"?>
<parts>
<part>Clutch</part>
<part>Gearbox</part>
<part>Cylinder head</part>
<part>Starter</part>
<part>Airbox</part>
<part>Inlet manifold</part>
</parts>
為什么沒有應用<xsl:sort select="object"/>
?
原因在於:
<parts> <xsl:apply-templates> <xsl:sort select="object"/> </xsl:apply-templates> </parts>
這適用模板的兒童( object
當前節點()的objects
),並通過他們的第一個字符串值對其進行排序object
的孩子。
但是,在提供的XML文檔中, object
沒有任何object
子object
- 因此它們都具有相同的排序鍵 - 空字符串 - 並且它們的原始順序不會被排序操作更改。
方案 :
<parts>
<xsl:apply-templates>
<xsl:sort select="."/>
</xsl:apply-templates>
</parts>
完整的轉變成為 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="objects">
<parts>
<xsl:apply-templates>
<xsl:sort select="."/>
</xsl:apply-templates>
</parts>
</xsl:template>
<xsl:template match="object">
<part>
<xsl:apply-templates/>
</part>
</xsl:template>
</xsl:stylesheet>
當它應用於提供的XML文檔時:
<objects>
<object>Clutch</object>
<object>Gearbox</object>
<object>Cylinder head</object>
<object>Starter</object>
<object>Airbox</object>
<object>Inlet manifold</object>
</objects>
產生了想要的正確結果:
<parts>
<part>Airbox</part>
<part>Clutch</part>
<part>Cylinder head</part>
<part>Gearbox</part>
<part>Inlet manifold</part>
<part>Starter</part>
</parts>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.