maba1950
Goto Top

Bestimmten Text aus vielen xml-Dateien in einem Ordner mit vielen Unterordnern auslesen und in neuer Text-Datei schreiben

Hallo liebe Batch'ler, Scrip'ler und Programmierer,

ich möchte aus vielen xml-Dateien, die alle in unterschiedlich benannten Unterordnern gespeichert sind, mit folgendem immer gleichem Aufbau:

<?xml version="1.0" encoding="iso-8859-1"?>
<data sig="album.1" lastmod="20141002 095704">
<id uuid="0cb6edf1-0d3e-4e16-8ad6-510dbeb9fc18" sigtoc="" />
<album name="Purple Cadillacs" genre="Folk" year="2013" titlecount="15" wavcount="13"\Purple Cadillacs" />
<artist name="David Munyon" />

nur diesen Text aus jeder xml-Datei auslesen und in einer
neuen Text - Datei wie folgt rein kopieren:


David Munyon - Purple Cadillacs
Al Di Meola - Scenario
Deep Purple - The Book Of Taliesyn

u.s.w.

Das Programm sollte unter Win 7 laufen.

Für den Einsatz eures Gehirnschmalzes bedanke ich schonmal ganz herzlich im Voraus!

Grüße maba1950

Content-ID: 277195

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

Ausgedruckt am: 16.11.2024 um 17:11 Uhr

Mitch123
Mitch123 13.07.2015 um 13:13:24 Uhr
Goto Top
Wieviel Aufwand und nachträgliche Änderungsmöglichkeit soll es denn sein? Du könntest Beispielsweise ein JAVA-Programm basteln, das in einem Ordner alle Datei parst und die Werte in eine Datei speichert.
Mitch123
Mitch123 13.07.2015 um 13:23:15 Uhr
Goto Top
In der Powershell zunächst für eine Datei relativ schnell umzusetzen:

$xml = [xml](get-content file.xml)
$xml.album.name
$xml.artist.name
122990
122990 13.07.2015 aktualisiert um 17:31:46 Uhr
Goto Top
Moin,
erstmal: Das ist kein ein valides XML was du da gepostet hast (es kann nur ein DocumentElement geben und nicht mehrere, also hole das nach und bitte mit Codetags.

Ich gehe von folgendem validen XML aus (dein XML hatte kein geschlossens data Tag !:
<?xml version="1.0" encoding="iso-8859-1"?>  
<data sig="album.1" lastmod="20141002 095704">  
    <id uuid="0cb6edf1-0d3e-4e16-8ad6-510dbeb9fc18" sigtoc="" />   
    <album name="Purple Cadillacs" genre="Folk" year="2013" titlecount="15" wavcount="13" />  
    <artist name="David Munyon" />  
</data>
Mit Powershell ist das dann schnell abgehandelt.
$quelle = 'C:\temp\xmlfiles'  
$zieldatei = 'C:\temp\interpreten.txt'  
gci $quelle -FIlter *.xml -recurse | %{
    # XML Datei als Objekt laden
    $xml = [xml](gc $_.Fullname | out-string)
    # Daten aus der XML-Datei in die neue Datei anhängen
    "$($xml.data.artist.name) - $($xml.data.album.name)" | out-file $zieldatei -Append  
}
Gruß grexit
maba1950
maba1950 13.07.2015 um 15:42:10 Uhr
Goto Top
Hallo! Mitch123 und grexit,

man seid Ihr schnell. Vielen Dank für die Antworten.
Die xml-Dateien haben alle den gleichen Namen und liegen in unterschiedlich bezeichneten Unterordnern in einem Hauptordner vor. In jeder xml wird der Artistname z.B. David Munyon und der Albumname z.B. Purple Cadillacs angegeben.
Die von mir gezeigte xml ist nur der Anfang, also nicht vollständig.
Die xml-Dateien liegen auf d:\Musik\100f31f6-a319-4d10-b9df-3ed37ba39dce\album.xml
d:\Musik\23f140f-7c5a-46b8-902a-9a97d2ee2a98\album.xml
d:\Musik\135d38ad-9943-4e8b-8b85-e8a50b088612\album.xml
u.s.w. vor.
Jetzt soll eine neue Text-Datei erzeugt werden, in der Artistname und Albumname z.B. wie folgt aufgeführt werden:
David Munyon - Purple Cadillacs
Al Di Meola - Scenario
Deep Purple - The Book Of Taliesyn

u.s.w.

grexit und Mitch123,

ich habe absolut keine Ahnung vom programmieren.

Bitte schaut euch das noch einmal an.

Vielen Dank im Voraus!

PS:
Bin erst morgen wieder im Forum.
122990
Lösung 122990 13.07.2015, aktualisiert am 14.07.2015 um 11:38:50 Uhr
Goto Top
Genau das was du willst macht mein Skript schon out-of-the-box !! Es durchläuft alle Ordner Rekursiv und holt sich aus allen XML-Dateien deine gewünschten Daten und schreibt sie nach deiner Vorlage in eine Textdatei... wo ist also das Problem. Minimal solltest du dich damit schon beschäftigten. Ich fahr ja auch kein Auto ohne Führerschein.

Für eine Anpassung ist es essentiell die korrekte Baumstruktur zu kennen und das ist mit einem kleinen Ausschnitt nur eingeschränkt möglich, daher meine vermutete Struktur.

Du musst bei meinem Skript nur am Anfang den Root-Pfad ab dem das Dateisystem durchsucht werden soll angeben,und in Zeile 2 den Pfad zur Textdatei in die die Daten geschrieben werden. Pfade erkennst du schon oder ?? Habs dir nochmal extra im Code kommentiert.

Wie man Powershell-Skripte ausführt steht hier : http://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren
Mit diesen Infos schafft das jetzt jeder Noob, der zumindest ein Minimum an Hirnschmalz mitbringt.

Bitte schaut euch das noch einmal an.
Muss ich nicht, funktioniert !! Glaub das jemandem der damit tagtäglich arbeitet.

Gruß grexit
maba1950
maba1950 14.07.2015 um 11:38:33 Uhr
Goto Top
Lieber grexit,

der Noob hat sein Minimum an Gehirnschmalz aktivieren können und freud sich außerordentlich, wenn nicht sogar überschwänglich, über Deine Hilfe.
Vielen, vielen Dank Grexit!

Gruß maba1950