Ich habe ein vorhandenes XML-Dokument mit einigen optionalen Knoten, und ich möchte einen neuen Knoten einfügen, aber an einer bestimmten Position.XML-Knoten an einer bestimmten Position eines vorhandenen Dokuments einfügen
Das Dokument sieht in etwa wie folgt aus:
<root>
<a>...</a>
...
<r>...</r>
<t>...</t>
...
<z>...</z>
</root>
Der neue Knoten (<s>...</s>
) sollte <r>
und <t>
zwischen Knoten eingefügt werden, was zu:
<root>
<a>...</a>
...
<r>...</r>
<s>new node</s>
<t>...</t>
...
<z>...</z>
</root>
Das Problem ist, dass die bestehende Knoten sind optional. Daher kann ich mit XPath den Knoten <r>
nicht finden und den neuen Knoten danach einfügen.
Ich möchte die "Brute-Force-Methode" vermeiden: Suche von <r>
bis zu <a>
, um einen Knoten zu finden, der existiert.
Ich möchte auch die Reihenfolge beibehalten, da das XML-Dokument einem XML-Schema entsprechen muss.
Sowohl XSLT als auch normale XML-Bibliotheken können verwendet werden, aber da ich nur Saxon-B verwende, ist die schemafähige XSLT-Verarbeitung keine Option.
Hat jemand eine Idee, wie man einen solchen Knoten einfügt?
thx, MyKey_
Dies funktioniert nicht, wenn kein 'r'-Knoten vorhanden ist (wie bei der ursprünglichen Frage: Alle Knoten sind optional). Wie würde die Vorlage aussehen, wenn Sie sich nicht darauf verlassen können, dass ein Knoten existiert? –
Hoppla, du hast Recht. Ich hatte den ursprünglichen Beitrag falsch gelesen. Jetzt habe ich die Antwort komplett ersetzt. Vielen Dank. –
Das ist wirklich cool. Geringfügige Verfeinerung: Wenn Sie $ elements-after ableiten, verwenden Sie eine Variable anstelle von 's', sodass Sie das Einfügen nach jedem untergeordneten Element automatisch durchführen können. –
13ren