2011-05-06 90 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你会发现大量的信息和样本。