Ich habe eine Anwendung, die Daten aus einer XML-Datei mit XPath extrahiert. Wenn ein Knoten in dieser XML-Quelldatei fehlt, möchte ich den Wert "N / A" zurückgeben (ähnlich der Oracle NVL-Funktion). Der Trick ist, dass die Anwendung XSLT nicht unterstützt; Ich möchte dies nur mit XPath und XPath tun.
Ist das möglich?
Dies ist nur möglich, wenn der Rückgabewert, wenn der Knoten vorhanden ist, der Zeichenfolgenwert des Knotens und nicht der Knoten selbst ist. Der XPath
%Vor% gibt den String-Wert des baz
-Elements zurück, wenn es existiert, andernfalls die Zeichenfolge "N / A".
Um den Ansatz zu verallgemeinern:
%Vor% Dabei ist $null-value
die Nullwertzeichenfolge und $node
der Ausdruck zum Auswählen des Knotens. Beachten Sie, dass wenn $node
zu einem Knotensatz ausgewertet wird, der mehr als einen Knoten enthält, der Zeichenfolgenwert des ersten Knotens verwendet wird.
Kurze Antwort: Nein. Eine solche Funktion wurde für Version 2 der XPath-Spezifikation berücksichtigt und ausdrücklich abgelehnt (siehe die nicht normative Illustrative User-written Abschnitt Funktionen ).
@jelovirt
Wenn ich das also richtig verstehe, verketten wir die Standardantwort und den Wert des Knotens und nehmen dann die korrekte Teilmenge der resultierenden Zeichenkette, indem wir auf die Existenz des Knotens prüfen, um den Versatz entweder auf Null oder auf die Position zu setzen direkt nach meiner Standardzeichenfolge. Das ist das perverseste Verdrehen einer Sprache, die ich je gesehen habe. (Ich liebe es!)
Um zu verdeutlichen, was Sie gesagt haben, funktioniert dieser Ansatz, wenn der Knoten fehlt, nicht wenn der Knoten leer ist. Aber wenn "number (boolean ($ node))" durch "string-length ($ node)" ersetzt wird, funktioniert es stattdessen auf leeren Knoten.