XML Datei in CSV umwandeln
Hallo zusammen,
ich weiß, das Thema wurde bereits mehrfach behandelt, aber leider komme ich zu keinem vollständigen Ergebnis.
Ich habe eine XML Datei und muss diese in eine csv umwandeln.
Nach vielen Versuchen mit diversen online Tools, Powershell und Converter bin ich am Ende mit meinem Latein.
Hier die xml Datei:
Die Datei, die ich konvertieren muss ist knapp 500MB groß, d.h. es kommen dann die selben "Buchdaten" von knapp 10.000 Büchern.
Die Fett markierten Stellen müssen nur übernommen werden und ideal wäre natürlich dass der Preis als 2,99 Euro (also mit Komma) übernommen wird und die Sonderzeichen und Umlaute direkt ausgebessert werden.
Ich glaube, ich hab irgendwo einen Denkfehler, da alle Felder "item name" heißen und ich die Differenzierung einfach nicht korrekt hin bekomme.
Vielen Dank schon mal für eure Hilfe.
murmeltier01
ich weiß, das Thema wurde bereits mehrfach behandelt, aber leider komme ich zu keinem vollständigen Ergebnis.
Ich habe eine XML Datei und muss diese in eine csv umwandeln.
Nach vielen Versuchen mit diversen online Tools, Powershell und Converter bin ich am Ende mit meinem Latein.
Hier die xml Datei:
<?xml version="1.0" encoding="utf-8"?>
<inventory type="full" year="2021" month="04" day="12" numbooks="7150">
<**book id="2987289"**>
<item name="action">update</item>
<item name="identity">
<item name="bookid">2987289</item>
<item name="meta_id"/>
<item name="iscp">3753450650</item>
<**item name="isbn13_ebook" type="epub">9783753450650</item**>
<item name="isbn13_print">9783753443997</item>
<item name="isbn13_substitute"/>
<item name="issn"/>
</item>
<item name="publishinfo">
<**item name="author">Yassamin - Sophia Boussaoud</item**>
<item name="editor"/>
<item name="translator"/>
<**item name="title">Straßengedichte</item**>
<**item name="subtitle">Begegnungen</item**>
<**item name="publisher" code="28049">Books on Demand</item**>
<item name="series"/>
<**item name="numpages">54</item**>
<**item name="booksize" type="epub">323</item**>
<item name="releaseyear" type="year">2021</item>
<item name="edition" number="1"/>
<**item name="language" code="de">German</item**>
<item name="available_presentations">DL</item>
<**item name="available_formats">ePUB</item**>
<**item name="devices">PC/MAC/eReader/Tablet</item**>
<item name="category" code="247" parent="0">Belletristik / Romane</item>
<item name="category" code="1318" parent="247">Lyrik / Gedichte</item>
<item name="age_range" type="from"/>
<item name="age_range" type="to"/>
<item name="subject" type="bisac" code="POE000000">POETRY / General</item>
<item name="subject" type="wgs" code="9151">Belletristik / Lyrik, Dramatik / Lyrik</item>
<**item name="tags">Lyrik, Gedichte, Begegnungen, München</item**>
<**item name="description" type="short">Wir treffen im Schnitt 12 andere Menschen pro Tag. Manche kennen wir, einige vergessen wir und andere kennen wir nicht aber sie bleiben uns in Erinnerung. Straßengedichte Begegnungen erzählt lyrisch von ganz unterschiedlichen Begegnungen in der Münchner Innenstadt und davon, wie viele Arten von menschlicher Verbindung es gibt.<br /><br />Yassamin-Sophia Boussaoud benennt sich selbst als fette, Braune, arabisch gelesene Frau, die die Welt häufig so sieht, wie sie sein könnte. Auf dem Instagram Account @minaandherchaos teilt sie unter anderem Gedichte und betreibt intersektional feministischen Aktivismus. Sie liebt den Regen, Käsekuchen und ihre Freund*innen.</item**>
<item name="description" type="extract"/>
<item name="image" type="cover_big">http://www.ciando.com/img/books/width167/3753450650_k.jpg</item>
<item name="image" type="cover_small">http://www.ciando.com/img/books/big/3753450650_k.jpg</item>
<item name="image" type="cover_thumb">http://www.ciando.com/img/books/3753450650_k.jpg</item>
<item name="image" type="cover_original">http://www.ciando.com/img/books/original/3753450650.jpg</item>
<item name="look_inside" recordcount="0"/>
<item name="search_full_text">0</item>
<item name="cd_to_book">0</item>
<item name="cd_link"></item>
<item name="toc"/>
<item name="widget"/>
<item name="extract"/>
<item name="last_update" type="cover_original">20210322</item>
</item>
<item name="chapters" recordcount="0"/>
<item name="economy">
<**item name="price" type="full" currency="EUR" country="DE">299</item**>
<item name="price" type="full" currency="CHF" country="CH">300</item>
<item name="price" type="full" currency="EUR" country="AT">299</item>
<item name="price" type="print" currency="EUR" country="WW">299</item>
<item name="special_condition">25</item>
</item>
<item name="rights">
<item name="delivery_date" type="announced">20210320</item>
<item name="geo_right">AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IT,LT,LU,LV,MT,NL,NO,PL,PT,RO,SE,SI,SK</item>
<item name="status" code="1">aktiv</item>
<item name="resell_allowed">0</item>
<item name="agency_model">0</item>
<item name="fsk"/>
<item name="license" type="endnutzer" restriction="0">1</item>
</item>
<item name="technology" recordcount="1">
<**item name="techinfo" format="EPUB" drm="watermark" presentation="DL" license="endnutzer"**>
<item name="copy" type="all"/>
<item name="print" type="all"/>
<item name="download">5</item>
<item name="reload">1</item>
<item name="delivery">sync.ciando.com</item>
</item>
</item>
</book>
</inventory>
Die Datei, die ich konvertieren muss ist knapp 500MB groß, d.h. es kommen dann die selben "Buchdaten" von knapp 10.000 Büchern.
Die Fett markierten Stellen müssen nur übernommen werden und ideal wäre natürlich dass der Preis als 2,99 Euro (also mit Komma) übernommen wird und die Sonderzeichen und Umlaute direkt ausgebessert werden.
Ich glaube, ich hab irgendwo einen Denkfehler, da alle Felder "item name" heißen und ich die Differenzierung einfach nicht korrekt hin bekomme.
Vielen Dank schon mal für eure Hilfe.
murmeltier01
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator tomolpi am 19.04.2021 um 15:53:23 Uhr
Codetags hinzugefügt
Content-ID: 665853
Url: https://administrator.de/forum/xml-datei-in-csv-umwandeln-665853.html
Ausgedruckt am: 22.05.2025 um 09:05 Uhr
5 Kommentare
Neuester Kommentar
Moin,
und das beinahe 1:1-Beispiel von "uns" hast du auch gefunden und versucht?
@colinardo hat es ja quasi für einen anderen Fall schon nachgebaut, wobei der Aufbau der XML bei dir natürlich etwas anders ist.
Gruß
em-pie
und das beinahe 1:1-Beispiel von "uns" hast du auch gefunden und versucht?
@colinardo hat es ja quasi für einen anderen Fall schon nachgebaut, wobei der Aufbau der XML bei dir natürlich etwas anders ist.
Gruß
em-pie
Servus Murmeltier, willkommen auf Administrator.de!
Bei ergänzenden individuellen Anpassungen bitte PN
Grüße Uwe
param(
[parameter(mandatory=$true)][string]$xmlpath
)
# XML Datei einlesen
$xml = new-Object XML; $xml.Load($xmlpath)
$xml.inventory.book | %{
# erstelle custom object mit den gewünschten Eigenschaften
[pscustomobject] @{
BookId = $_.Id
isbn13_ebook = $_.SelectSingleNode("item[@name='identity']/item[@name='isbn13_ebook']").innerText
author = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='author']").innerText
title = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='title']").innerText
subtitle = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='subtitle']").innerText
publisher = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='publisher']").innerText
numpages = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='numpages']").innerText
booksize = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='booksize']").innerText
language = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='language']").innerText
available_formats = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='available_formats']").innerText
devices = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='devices']").innerText
tags = $_.SelectSingleNode("item[@name='publishinfo']/item[@name='tags']").innerText
description = ($_.SelectSingleNode("item[@name='publishinfo']/item[@name='description']").innerText -replace '<br\s*/?>',"`r`n") -replace '<[^>]+>'
price = [int]$_.SelectSingleNode("item[@name='economy']/item[@name='price' and @type='full' and @currency='EUR']").innerText / 100
format = $_.SelectSingleNode("item[@name='technology']/item[@name='techinfo']").format
drm = $_.SelectSingleNode("item[@name='technology']/item[@name='techinfo']").drm
presentation = $_.SelectSingleNode("item[@name='technology']/item[@name='techinfo']").presentation
license = $_.SelectSingleNode("item[@name='technology']/item[@name='techinfo']").license
}
} | export-csv "$([System.IO.Path]::GetDirectoryName($xmlPath))\$([System.IO.Path]::GetFilenameWithoutExtension($xmlPath)).csv" -Delimiter ";" -NoType -Encoding UTF8
Grüße Uwe
Zitat von @murmeltier01:
Klappt einwandfrei. Jetzt kapier ich auch, wo meine doch eher großen Fehler waren.
Freut mich für dich.Klappt einwandfrei. Jetzt kapier ich auch, wo meine doch eher großen Fehler waren.
Vielen Dank und eine schöne Woche.
Wünsche ich ebenso.Grüße Uwe