Как отсортировать многоуровневый XML в зависимости от определенного атрибута, который присутствует в каждом теге XML? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть XML, который содержит различные теги, и хорошо, что каждый тег имеет атрибут с именем «id», который может быть не уникальным. Мне нужно отсортировать этот XML таким образом, чтобы теги на том же уровне сортировались на основе атрибута "id".

Я новичок в этом деле и не очень разбираюсь в XSLT, и он кажется слишком сложным. Есть ли другой способ добиться требуемой конверсии?

Пример ввода XML

<parent id="p2" name="a">
    <child id="c2" name="z"/>
    <child id="c1" name="y"/>
</parent>
<parent id="p1" name="b">
    <child id="c1" name="w"/>
    <child id="c2" name="x"/>
</parent>

Ожидаемый вывод XML

<parent id="p1" name="b">
    <child id="c1" name="w"/>
    <child id="c2" name="x"/>
</parent>
<parent id="p2" name="a">
    <child id="c1" name="y"/>
    <child id="c2" name="z"/>
</parent>

Примечание. Фактический XML очень большой и имеет много уровней. Мне нужно применить сортировку на каждом уровне.

1 Ответ

0 голосов
/ 11 июня 2019

Я обычно использую xsh для манипулирования XML (я также поддерживаю его).Вы можете отсортировать все элементы child по их id во всех элементах parent по следующему коду:

open file.xml ;
for //parent xmove &{ sort :k @id child } into . ;
save :b ;

Требуется специальная конструкция &{ ... }, поскольку в противном случае узлы в списке узловвсегда возвращается в порядке документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...