2012-02-06 3 views
4

Кто-нибудь знает, как я могу загрузить XML-файл и отсортировать его, а затем сохранить файл?сортировать XML-теги в алфавитном порядке

У меня есть XML-файл с кучей настроек .. и теперь она становится трудно управлять, потому что они не являются в любом естественном порядке сортировки ...

например

<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> 
+0

В какой ОС вы находитесь? Какой язык или библиотеки вы предпочитаете использовать? – Dave

+0

OS X ... используя Eclipse ... узнал, что ** принятый ответ ** ниже подходит для моих потребностей. – ycomp

ответ

5

Вы можете использовать XSLT и запустить его из командной строки. (Я бы рекомендовал Saxon, но Xalan будет нормально.)

Вот пример ...

XML Input

<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> 
+0

работает потрясающе! Я помещал этот xsl-файл в ** Eclipse **, и я просто нажимаю «run» и выбираю свой исходный xml и voila ... почти идеально ... просто нужно выбрать «формат» в Eclipse, чтобы отступом все это снова приятно. спасибо, это действительно отличное решение этой проблемы. – ycomp

+0

Вы очень приветствуете @ycomp. Я рад, что это сработало для вас. –

+0

моя память (которая не самая лучшая), похоже, согласна с моим комментарием, что она отлично работает для меня раньше ... но теперь она не выглядит так хорошо ... возможно, это потому, что я добавил что-то этот xml исходный файл, который не понравился XSLT-файлу ... Я часто обновляю исходный файл, так как это набор строк, которые моя программа использует для локализации. Любая идея, что может привести к неправильному сортировке этого файла XSLT? – ycomp

1

Вы можете сделать это с помощью скрипта Python - см:

LXML - Sorting Tag Order

Для примера одного, который использует модуль LXML.

+0

thats nice, вы можете использовать его как плагин в Notepad ++. – MushyPeas