2017-02-02 12 views
1

Ich verwende Version PostgreSQL 8.3.12.Konvertieren von Spalten-XML-Daten in Zeilen

Tabelle Spaltenname: xmltest

iddata

Data Spalte enthält XML-Daten, die wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<ItemData> 
    <ReviewComments>&lt;?xml version="1.0" encoding="utf-8"?&gt; 
    </ReviewComments> 
    <SmartTextData RootProtect="True"> 
     <STI_Summary IID="d10c5cbf-f5cf-4478-9f33-4580c1930413" IR="True"> 
      <ObjectValue /> 
      <CP /> 
      <SIProps ST="4" PL="False" PLS="" /> 
      <STI_SummaryActiveProblemsField LIID="cdbd7044-ccde-11db-8cba-df0a56d89593" IID="37742a5f-7998-4715-8d43-0d7a19284d44" IR="True" RW="1"> 
      <HD Title="Active Problems" /> 
      <ObjectValue /> 
      <CP> 
       <PosReplace /> 
       <NegReplace /> 
      </CP> 
      <SIProps ST="4" PL="False" PLS="" /> 
      <STI_US> 
       <ObjectValue> 
        <TextValue> 
         <![CDATA[ 
]]> 
        </TextValue> 
       </ObjectValue> 
       <CP /> 
       <SIProps ST="1" SS=" " PL="False" PLS="" /> 
      </STI_US> 
      <STI_DxItem LIID="71194038-8ffb-488b-8af5-5f1f1a679115" IID="aaf2de4e-2f1f-409b-87b7-b7265bec37db" RW="1"> 
       <HD Title="Coronary artery disease " /> 
       <ObjectValue> 
        <Code> 
         <CodingSystem>ICD-9 CM</CodingSystem> 
         <Value>414.01</Value> 
        </Code> 
        <Code> 
         <CodingSystem>SWICPC</CodingSystem> 
         <Value>08.0.K76.CIR</Value> 
        </Code> 
       </ObjectValue> 
      </STI_DxItem > 
     </STI_Summary> 
    </SmartTextData> 
</ItemData> 

Ich möchte XML-Tag IID und CODE Daten zu den jeweiligen ID-Spalte zu verschütteten .

Erwartete Ausgabe:

  ID LIID           Code_Value CodingSystem 
      1 d10c5cbf-f5cf-4478-9f33-4580c1930413  NULL 
      1 37742a5f-7998-4715-8d43-0d7a19284d44  NULL 
      1 aaf2de4e-2f1f-409b-87b7-b7265bec37db  414.01   IC CM 
      1 aaf2de4e-2f1f-409b-87b7-b7265bec37db  08.0.K76.CIR SWICPC 

Hinweis: Ich verwende Version PostgreSQL 8.3.12 mit dieser einiger neuen Syntax von XMLPATH nicht funktionieren.

Ich möchte einfach XML-Daten in Zeilen Spaltenstruktur zu konvertieren.

Vielen Dank für das Lesen.

ERROR: function unnest(integer[]) does not exist in postgresql

Nach der Lösung dieser Frage, Sie unnest von ihrem eigenen, auf einem eindimensionalen Arrays auf diese Weise implementieren können:

+0

Datei kann nicht überprüft werden, gibt es eine fehlende Tag .http: //www.xmlvalidation.com/ – McNets

+0

Ihre XML ist nicht richtig ausgeglichen, 'STI_DxItem' ist nicht geschlossen. – jcaron

+0

@jcaron CODE BEARBEITET. ES IST JEDES WAT, um alle LLID hier heraus zu verschütten. –

Antwort

0

bei SO Fragen der Suche, ich habe dies gefunden:

CREATE OR REPLACE FUNCTION unnest2(anyarray) 
    RETURNS SETOF anyelement AS 
$BODY$ 
    SELECT $1[i] FROM generate_series(array_lower($1,1), array_upper($1,1)) i; 
$BODY$ LANGUAGE sql IMMUTABLE; 

Diese Funktion sollte es ermöglichen, Ihre Daten mit Hilfe nächsten Satz abfragen:

SELECT xpath('/ItemData/SmartTextData/STI_Summary/STI_DxItem/@IID', data, array[array['aaa','example.com']]) as IID, 
     unnest2(xpath('/ItemData/SmartTextData/STI_Summary/ObjectValue/Code/CodingSystem/text()', data, array[array['aaa','example.com']])) as Code, 
     unnest2(xpath('/ItemData/SmartTextData/STI_Summary/ObjectValue/Code/Value/text()', data, array[array['aaa','example.com']])) as Value 
from xmltest2; 

Beachten Sie, dass ich array[array['aaa','example.com']] verwendet habe, wie Sie in Ihren Kommentaren darauf hingewiesen haben, da Ihre XML-Daten kein Schema haben.

Ich habe es im Rextester getestet und es funktioniert.

+--------------------------------------+----------+--------------+ 
|     iid     | code | value  | 
+--------------------------------------+----------+--------------+ 
| aaf2de4e-2f1f-409b-87b7-b7265bec37db | ICD-9 CM | 414.01  | 
+--------------------------------------+----------+--------------+ 
| aaf2de4e-2f1f-409b-87b7-b7265bec37db | SWICPC | 08.0.K76.CIR | 
+--------------------------------------+----------+--------------+ 

bestellen hier: Rextester

+0

seine nicht auf 8,3 Vesrion .Thnk für Hilfe zu notieren. Aber gibt es noch einen anderen Weg, um LID hier zu finden? –

+0

aber nichtnest nicht – McNets

+0

Fehler erhalten 'Unbekannte Funktion Xpath' –

Verwandte Themen