anna85
Goto Top

Daten aus XML Datei auslesen

Hallo zusammen,
ich habe eine Aufgabe, die Datein aus XML in eine Tabelle einzulesen.
die XML Datei habe ich schon zu SQL Server Management imortiert. Jetzt muss ich die DAten auselsen, aber leider passiert nicht viel.

Die XML Datei im grob sieht so aus:

[code]
<record type="Authority">
<leader>00000nz a2200000nc 4500</leader>
<controlfield tag="001">1011387409</controlfield>
<controlfield tag="003">DE-101</controlfield>
<controlfield tag="005">20150227101359.0</controlfield>
<controlfield tag="008">110430n</controlfield>
<datafield tag="024" ind1="7" ind2=" ">
<subfield code="a">http://d-nb.info/brd/123</subfield>
<subfield code="2">uri</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">(DE-101)105f563</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">(DE-588)632a452</subfield>
</datafield>
</record>
[/code]

Ich frage die xml so ab:

[code]

select
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:leader[1]','varchar(255)') leader,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:controlfield[1]','varchar(255)') controlfield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[1]/@tag','varchar(255)') datafield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[1]/marc21:subfield[1]','varchar(255)') subfield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[2]/@tag','varchar(255)') datafield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[2]/marc21:subfield[1]','varchar(255)') subfield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[3]/@tag','varchar(255)') datafield,
orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[3]/marc21:subfield[1]','varchar(255)') subfield,


FROM (

--Abfrage auf Import-Tabelle

Select Top 1 xmlData

FROM dbo.orgaImportHistory


--order by loadedDateTime desc

) xml


cross apply xml.xmlData.nodes('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:collection/marc21:record') as orga(ref)
--cross apply orga.ref.nodes('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:collection/marc21:record/datafield[@tag="110"]')
[/code]

und als Ergebnis bekomme ich leader, controlfield und datafield 1, datafield 2, datafield 3.

Nun wenn ein Datensatz mehr als 4 Datafields hat, sehe ich das nicht. Da die Datei sehr groß ist, möchte ich fragen: wie kann ich so auslesen, dass die Abfrage gib mir einfach zu jede controlfield alle datafileds. Es bedeutet 1 Datensatz wird 3 Datafields haben, ein andere 5 Datafileds.
Könnnte man das irgendwie vereinfachen?


Falls ich im falschen Forum bin, bitte mitteilen!
Viele Grüße aus Ulm!

Content-ID: 449873

Url: https://administrator.de/contentid/449873

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

ukulele-7
ukulele-7 10.05.2019 um 10:46:55 Uhr
Goto Top
Ich habe auch so ein bastel-Projekt mit XML in SQL grade. Bisher war die Ausgangsstruktur nicht so flexibel das ich eine variable Anzahl an Elementen hatte aber auf die schnelle habe ich das hier gefunden:
https://stackoverflow.com/questions/19025118/how-to-retrieve-all-child-e ...
Anna85
Anna85 10.05.2019 um 13:01:01 Uhr
Goto Top
Hallo,

Dankeschön, super Beispiel.
Allerdings kann ich es in meine Abfrage nicht umsetzen. Ich habe Probleme, bekomme ich Fehler, oder keine Zeilen (0 Zeilen betroffen) face-sad

Vielleicht kann jemand hier dazu was sagen.

Liebe Grüße!