У меня есть XML-файл, который я хочу отсортировать по атрибуту. Файл структурирован, как показано ниже:
<wb xmlns:cf="http://www.macromedia.com/2004/cfform">
<a:form name="chart">
<a:input FIELDNUMBER="09" INDEX="2" LEFT="200" />
<a:input FIELDNUMBER="08" INDEX="3" LEFT="200" />
<a:fieldset FIELD="a" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="02" INDEX="4" LEFT="200" />
<a:select1 FIELDNUMBER="01" />
</a:fieldset>
<a:fieldset FIELD="b" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="04" INDEX="7" LEFT="200" />
<a:select1 FIELDNUMBER="03" />
<a:fieldset FIELD="c" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="06" INDEX="8" LEFT="200" />
<a:input FIELDNUMBER="05" INDEX="6" LEFT="200" />
</a:fieldset>
</a:fieldset>
</a:form>
</wb>
Я бы хотел отсортировать весь приведенный выше XML по @fieldnumber, но в то же время я хочу сохранить ту же структуру XML. Мне удалось отсортировать другие XML-файлы, но у них не было таких уровней вложенности. Возможно ли это только с помощью XSL, и если да, то как это можно сделать?
Вывод должен быть следующим:
<wb xmlns:cf="http://www.macromedia.com/2004/cfform">
<a:form name="chart">
<a:input FIELDNUMBER="08" INDEX="3" LEFT="200" />
<a:input FIELDNUMBER="09" INDEX="2" LEFT="200" />
<a:fieldset FIELD="a" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="01" />
<a:input FIELDNUMBER="02" INDEX="4" LEFT="200" />
</a:fieldset>
<a:fieldset FIELD="b" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="03" />
<a:input FIELDNUMBER="04" INDEX="7" LEFT="200" />
<a:fieldset FIELD="c" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="05" INDEX="6" LEFT="200" />
<a:input FIELDNUMBER="06" INDEX="8" LEFT="200" />
</a:fieldset>
</a:fieldset>
</a:form>
</wb>
В качестве другого примера, если FIELDNUMBER 04 изменить на значение, большее 7, например, на 10 (в этом примере предположим, что 10), тогда вывод набора полей со значением b поля FIELD становится:
<a:fieldset FIELD="b" FIELDNAME="FieldSet1">
<a:select1 FIELDNUMBER="03" />
<a:fieldset FIELD="c" FIELDNAME="FieldSet1">
<a:input FIELDNUMBER="05" INDEX="6" LEFT="200" />
<a:input FIELDNUMBER="06" INDEX="8" LEFT="200" />
</a:fieldset>
<a:input FIELDNUMBER="10" INDEX="7" LEFT="200" />
</a:fieldset>