Я хочу отсортировать XML-файл «свободной формы» по нескольким атрибутам (сначала по T, а затем по L). XML немного сложен и структурирован, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<wb xmlns:cf="http://www.macromedia.com/2004/cfform" xmlns:a="urn:dummy">
<a:form name="chart">
<a:fieldset FIELD="a" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="01" L="1" T="2" />
<a:input FIELDNUMBER="02" INDEX="4" L="200" T="1" />
</a:fieldset>
<a:fieldset FIELD="b" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="03" T="3" L="1" />
<a:input FIELDNUMBER="04" INDEX="7" T="4" L="200" />
<a:fieldset FIELD="c" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="05" T="10" INDEX="6" L="400" />
<a:input FIELDNUMBER="06" T="8" INDEX="8" L="200" />
</a:fieldset>
</a:fieldset>
<a:input FIELDNUMBER="08" INDEX="3" L="3" T="5" />
<a:input FIELDNUMBER="09" INDEX="2" L="2" T="5" />
</a:form>
</wb>
PS:
- Корневым элементом является wb, и за ним всегда следует: form
- L и T всегда находятся в элементах, которые имеют тег в пространстве имен a, единственным исключением является: fieldset, в котором нет L и T
- a: fieldset может иметь несколько дочерних элементов пространства имен a, включая другой a: fieldset
- При сортировке дочерних элементов, находящихся в наборе полей, они должны оставаться привязанными к своему текущему родителю.
Полученный результат должен быть следующим:
<?xml version="1.0" encoding="utf-8"?>
<wb xmlns:cf="http://www.macromedia.com/2004/cfform" xmlns:a="urn:dummy">
<a:form name="chart">
<a:fieldset FIELD="a" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="02" INDEX="4" L="200" T="1" />
<a:select1 FIELDNUMBER="01" L="1" T="2" />
</a:fieldset>
<a:fieldset FIELD="b" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="03" T="3" L="1" />
<a:input FIELDNUMBER="04" INDEX="7" T="4" L="200" />
<a:fieldset FIELD="c" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="06" T="8" INDEX="8" L="200" />
<a:input FIELDNUMBER="05" T="10" INDEX="6" L="400" />
</a:fieldset>
</a:fieldset>
<a:input FIELDNUMBER="09" INDEX="2" L="2" T="5" />
<a:input FIELDNUMBER="08" INDEX="3" L="3" T="5" />
</a:form>
</wb>
Для лучшего понимания мы можем предположить, что L обозначает Left, а T обозначает Top. Итак, идея этого заключается в том, что когда я просматриваю преобразованный XML, я могу сразу заметить, какие элементы предшествуют чему.
Что вы думаете об этом?