chicagojaner
Goto Top

3 Tags aus XML per Batch auslesen

Hi,

stehe vor einem Problem und erhoffe mir von Euch den rettenden Hinweis:

Ich hab einen Ordner mit vielen vielen XML Dateien. Meine Aufgabe ist es, die für mich relevanten Daten aus den XML Dateien zu lesen. Mein Konstrukt steht soweit auch:

In der XML muss irgendwo folgender Part auftauchen:

<nummer>
<quelle>1</quelle>
<kursnummer>811</kursnummer>
<lfdnr>009</lfdnr>
<jahr>16</jahr>
</nummer>

Mein erste Suche sieht wie folgt aus:

findstr /L /S /M "<kursnummer>811</kursnummer>" C:\Ablage\Datenziel-XML\*.xml

Das klappt auch, die Batch listet mir alle XML Dateien aus.

Ich möchte aber auch die TAGS lfdnr und jahr integrieren. Ich hatte mir schon überlegt 3 batches laufen zu lassen:

1 sucht nach Kursnummer
2 nach lfdnr
3 nach Jahr

Das blöde ist nur, diese Tags tauchen auch in einem anderen Zusammenhang auf, so dass ich nur das ganze betrachten kann.

Wie ergänze ich meine Suche?

Content-Key: 545817

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: Crusher79
Crusher79 Feb 11, 2020 at 08:30:33 (UTC)
Goto Top
Hi,

wieso nimmst nich PowerShell?

https://dotnet-helpers.com/powershell/reading-xml-files-with-powershell/

https://www.windowspro.de/script/xml-powershell-elemente-attribute-ausle ...

Alles andere ist nur gefrickel. Am einfachsten ist es, wenn du quasi mit der XML arbeitest. Und nich gegne die Struktur.

mfg Crusher
Mitglied: 142970
142970 Feb 11, 2020 updated at 09:25:10 (UTC)
Goto Top
Zitat von @Crusher79:
wieso nimmst nich PowerShell?
Eben, das macht heute echt keiner mehr mit 80er Jahre Batch !

As simple as that
Get-ChildItem 'E:\Files' -File -Filter *.xml | ?{([xml](gc $_.Fullname)).SelectSingleNode('//nummer[kursnummer[.="811"] and lfdnr[.="009"] and jahr[.="16"]]')}  
Und wenn es unbedingt in einer Batch stehen muss, das geht auch
@echo off
powershell -EP ByPass -NoP -C "Get-ChildItem 'E:\Files' -File -Filter *.xml | ?{([xml](gc $_.Fullname)).SelectSingleNode('//nummer[kursnummer[.=\"811\"] and lfdnr[.=\"009\"] and jahr[.=\"16\"]]')}"