Wählen Sie xml-element mit dem Wert in Oracle
Ich versuche zu extrahieren eines Werts aus einem xml-element, das sich in einem XMLTYPE-Spalte in einer Oracle-Tabelle. Das xml-element, das ich bin versucht zu extrahieren, haben einen Elternteil, für die ein namespace definiert ist.
Die xml sieht so aus:
<a>
<b xmlns="urn:www.someSite.com/myModel">
<c>my value</c>
</b>
</a>
Wenn ich will, zu extrahieren Sie den Inhalt der "ein" element der Kontext korrekt zurückgegeben:
SELECT Extract(myColumn, '/a') FROM myTable;
Aber für die Rücksendung der Inhalt der "c" - element, es gelang mir nicht zu finden, jede version zu arbeiten. Die folgende Anleitung funktioniert nicht:
SELECT Extract(myColumn, '/a/b/c') FROM myTable;
SELECT Extract(myColumn, '/a/b/c', 'xmlns="urn:www.someSite.com/myModel"') FROM myTable;
SELECT Extract(myColumn, '/a/b/c', 'urn:www.someSite.com/myModel') FROM myTable;
Kann jemand mir helfen, mit der extract-Anweisung, die arbeiten würden in diesem Fall?
InformationsquelleAutor axl g | 2012-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die
a
- element keine Namensraum, können Sie zuerst extrahieren Sie die Ihr untergeordneten Elemente, ohne die Verwendung von namespaces in der Funktion und extrahieren Sie dann den Wert aus derb
mit dem namespace:Versuchen:
InformationsquelleAutor A.B.Cade
Ich will hinzufügen, dass dies auch die besseren modernen Lösung jetzt seit extract/extractvalue abgeschrieben.
InformationsquelleAutor Jokke Heikkilä
Wenn die Standard-namespace-änderungen, eine Möglichkeit zur Angabe von namespaces zu schreiben das wildcard-Zeichen ('*') und die local-name() und namespace-uri() XPath-Funktionen.
select extract(myColumn, '/a/*[local-name()='b' and namespace-uri()='urn:www.someSite.com/myModel']/*[local-name()='c' and namespace-uri()='urn:www.someSite.com/myModel']')
from myTable
InformationsquelleAutor Miguel Angel Maroto
InformationsquelleAutor sony