У меня есть существующий документ XML с некоторыми необязательными узлами, и я хочу вставить новый узел, но в определенную позицию.Вставить узел XML в определенную позицию существующего документа
документ выглядит следующим образом:
<root>
<a>...</a>
...
<r>...</r>
<t>...</t>
...
<z>...</z>
</root>
Новый узел (<s>...</s>
) должен быть вставлен между узлом <r>
и <t>
, в результате чего:
<root>
<a>...</a>
...
<r>...</r>
<s>new node</s>
<t>...</t>
...
<z>...</z>
</root>
Проблема в том, что существующая узлы являются необязательными. Поэтому я не могу использовать XPath для поиска узла <r>
и вставить новый узел после него.
Я хотел бы избежать «метода грубой силы»: поиск от <r>
до <a>
, чтобы найти узел, который существует.
Я также хочу сохранить заказ, поскольку XML-документ должен соответствовать XML-схеме.
XSLT, а также обычные библиотеки XML могут использоваться, но поскольку я использую только Saxon-B, обработка XSLT, ориентированная на схему, не является вариантом.
У кого-нибудь есть идея о том, как вставить такой узел?
ТНХ, MyKey_
Это не работает, когда нет узла 'r' (согласно исходному вопросу: все узлы являются необязательными). Как будет выглядеть шаблон, если вы не можете полагаться на какой-либо узел? –
К сожалению, вы правы. Я неправильно прочитал оригинальный пост. Теперь я полностью заменил ответ. Благодарю. –
Это действительно здорово. Небольшое уточнение: при получении $ elments-after используйте переменную вместо 's', так что вы можете автоматически обрабатывать вставку после любого дочернего элемента. –
13ren