2 Stimmen

SELECT from Tabelle mit XML-Daten in Spalte bytea

Ich habe eine PostgreSQL-Datenbank, die eine Tabelle mit einer Spalte vom Typ Bytea namens "data" enthält. "data" enthält große XML-Daten.

Ich möchte in der Lage sein, nach bestimmten Zeilen zu suchen, in denen es ein XML-Element in "data" namens <fw:MyID></fw:MyID> die "ID57841" enthält. Es sieht also so aus <fw:MyID>ID57841</fw:MyID> .

Außerdem würde ich gerne bestimmte XML-Elemente aus dieser Spalte ausgeben, z. B. <fw:MyPassword></fw:MyPassword> .

Ich kann nicht in die Datenbank schreiben, nur lesen. Ich habe viel nach Antworten gegoogelt, kann aber nichts finden, was mir hilft. Kann mir bitte jemand helfen?

2voto

a_horse_with_no_name Punkte 489934

Sie sollten in der Lage sein, die Bytea-Spalte "on-the-fly" in eine Textspalte zu konvertieren, indem Sie convert_from() und dann eine xpath()-Funktion auf das Ergebnis anwenden.

Etwa so:

SELECT xpath('/fw:MyPassword/text()', convert\_from(bytea\_column, 'UTF-8'))
FROM your\_table;

Wahrscheinlich müssen Sie den Namespace als dritten Parameter angeben.
Einzelheiten hierzu finden Sie im Handbuch:
http://www.postgresql.org/docs/current/static/functions-xml.html#FUNCTIONS-XML-PROCESSING

Übrigens: Um < und > in Ihren Beitrag einzubauen, können Sie die HTML-Entitäten < und > verwenden

1voto

fc9.30 Punkte 1943

Das sollte funktionieren:

SELECT xpath('//fw:MyPassword/text()', CAST(convert_from(bytea_column, 'UTF-8') AS XML))
FROM your_table;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X