将XML标记按字母顺序排序

时间:2012-02-06 14:49:43

标签: xml

任何人都知道我可以加载XML文件并对其进行排序然后保存文件的方法吗?

我有一个带有大量设置的xml文件..现在它变得难以管理,因为它们没有任何自然的排序顺序......

e.g。

<edit_screen_a>
<settings_font_size>
<edit_screen_b>
<display_screen>
<settings_font_name>

排序:

<display_screen>
<edit_screen_a>
<edit_screen_b>
<settings_font_name>
<settings_font_size>

2 个答案:

答案 0 :(得分:6)

您可以使用XSLT并从命令行运行它。 (我建议使用Saxon,但Xalan也可以。)

这是一个例子......

XML输入

<doc>
  <edit_screen_a/>
  <settings_font_size/>
  <edit_screen_b/>
  <display_screen/>
  <settings_font_name/>
</doc>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="doc">
    <doc>
      <xsl:apply-templates>
        <xsl:sort select="name()"/>
      </xsl:apply-templates>      
    </doc>
  </xsl:template>

</xsl:stylesheet>

XML输出

<doc>
   <display_screen/>
   <edit_screen_a/>
   <edit_screen_b/>
   <settings_font_name/>
   <settings_font_size/>
</doc>

答案 1 :(得分:1)

您可以使用Python脚本执行此操作 - 请参阅:

LXML - Sorting Tag Order

有关使用LXML模块的示例。