2011-05-06 130 views
1

有沒有使用XSLT重新排序XML中屬性的方法?XSLT:使用XSLT重新排序XML中的屬性

比如我有一個像

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
    <book author="Anonymous" qty="10" price="100" title="Basic XML"/> 
    <book author="Anonymous" qty="20" price="200" title="Basic XLST"/> 
</books> 

一個XML改造後,我希望它像:提前

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
    <book title="Basic XML" author="Anonymous" price="100" qty="10"/> 
    <book title="Basic XLST" author="Anonymous" price="200" qty="20"/> 
</books> 

感謝。

回答

5

XML中沒有屬性順序。你已經顯示的xml文件是完全相同的東西的稍微不同的表示,任何看到它們之間的差異不是(表現爲)xml解析器。

老實說。一個正確的XML解析器沒有看到兩者之間的任何區別。

可能有個別的xslt實現可以產生這種差異,我不知道。但總的來說,xslt只是談論xml,而不是關於xml的文本表示,因爲在那個級別上沒有區別,所以沒有標準的xslt方法來實現您所期望的結果並不奇怪。

你當然可以做的是帶上任何xml解析器/寫入器,並改變寫入部分以按照你想要的順序發出屬性。就個人而言,我會使用像ruby的rexml之類的東西,只是因爲ruby允許在運行時重新定義方法並且不需要修改原始代碼。

+0

正確答案。 +1。 – 2011-05-06 10:36:40

+0

儘管從XML的角度來看是等價的,但當XML受源代碼控制時,文本等價性可能會成爲一個重要問題。 – bwerks 2015-09-04 19:39:14

0

我想你的XML應該是這樣的:

<books> 
    <book> 
     <author>Anonymous</author> 
     <qty>10</qty> 
     <price>100</price> 
     <title>Basic XML</title> 
    </book> 
    <book> 
     <author>Anonymous</author> 
     <qty>20</qty> 
     <price>200</price> 
     <title>Basic XsLt</title> 
    </book> 
</books> 

然後你就可以重新排序,如你所願。 Here你會發現大量的信息和樣本。