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-Key: 277195

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: Mitch123
Mitch123 Jul 13, 2015 at 11:13:24 (UTC)
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.
Member: Mitch123
Mitch123 Jul 13, 2015 at 11:23:15 (UTC)
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
Mitglied: 122990
122990 Jul 13, 2015 updated at 15:31:46 (UTC)
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
Member: maba1950
maba1950 Jul 13, 2015 at 13:42:10 (UTC)
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.
Mitglied: 122990
Solution 122990 Jul 13, 2015, updated at Jul 14, 2015 at 09:38:50 (UTC)
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
Member: maba1950
maba1950 Jul 14, 2015 at 09:38:33 (UTC)
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