Mam istniejący dokument XML z opcjonalnymi węzłami i chcę wstawić nowy węzeł, ale w określonej pozycji.Wstaw węzeł XML w określonej pozycji istniejącego dokumentu
Dokument wygląda mniej więcej tak:
<root>
<a>...</a>
...
<r>...</r>
<t>...</t>
...
<z>...</z>
</root>
nowego węzła (<s>...</s>
) powinien być wstawiony pomiędzy węzłem <r>
i <t>
, powodując:
<root>
<a>...</a>
...
<r>...</r>
<s>new node</s>
<t>...</t>
...
<z>...</z>
</root>
Problem polega na tym, że istniejące węzły są opcjonalne. Dlatego nie mogę użyć XPath do znalezienia węzła <r>
i wstawić po nim nowego węzła.
Chciałbym uniknąć "metody brutalnej siły": Wyszukaj od <r>
do <a>
, aby znaleźć istniejący węzeł.
Chcę również zachować kolejność, ponieważ dokument XML musi być zgodny ze schematem XML.
Można używać XSLT, jak również zwykłych bibliotek XML, ale ponieważ używam tylko Saxon-B, przetwarzanie XSLT z uwzględnieniem schematu nie jest opcją.
Czy ktoś ma pomysł, jak wstawić taki węzeł?
thx, MyKey_
To nie działa, gdy nie ma węzła "r" (jak na oryginalne pytanie: Wszystkie węzły są opcjonalne). Jak wyglądałby szablon, gdy nie można polegać na żadnym węźle? –
Ups, masz rację. Nie odczytałem oryginalnego wpisu. Teraz całkowicie zastąpiłem odpowiedź. Dzięki. –
To naprawdę fajne. Niewielkie wyrafinowanie: w wyprowadzaniu $ elment-after, użyj zmiennej zamiast "s", dzięki czemu możesz automatycznie obsługiwać wstawianie po dowolnym dziecku o wartości. –
13ren