epsodus

XML File 1 Zeile ausschneiden

Hallo zusammen,

ich habe eine Frage zu dem Thema Powershell, so fit bin ich darin nicht. Folgenden Code habe ich um die erste Zeile aus allen XML Dateien auszuschneiden.
Folgendes Problem habe ich, ich möchte vorher in jedem File prüfen, ob in der ersten Zeile 1TRANS steht.
Wenn dort 1TRANS steht, soll diese Zeile ausgeschnitten werden und die Datei gespeichert werden.
Steht in der ersten Zeile kein 1TRANS, dann soll die Datei unbehandelt bleiben.

kann mir hier jemand helfen ?

$file = "$XXXX_ROOT\*.xml"  
	Get-ChildItem -Path $file -File -Filter *.xml |
	ForEach-Object {
		(Get-Content -Path $_.FullName | Select-Object -Skip 1) | Set-Content -Path $_.FullName -Encoding UTF8

Zur Info, so sieht der Inhalt eines XML Files aus, die erste Zeile soll entfernt werden, wenn sie vorhanden ist

1TRANS20200130 100GTR XML Download XXX0001 10298310004 0000000016DTCCCDT 20200130 11:35 TTT 20200130 11:35
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:auth.yyy.xxx.zz"
<FinInstrmRptgStsAdvc>
<StsAdvc>
<MsgRptIdr>RL101xx579368</MsgRptIdr>

Gruß Epsodus
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 564872

Url: https://administrator.de/forum/xml-file-1-zeile-ausschneiden-564872.html

Ausgedruckt am: 30.04.2025 um 18:04 Uhr

143728
Lösung 143728 15.04.2020 um 12:17:17 Uhr
Goto Top
$file = "$XXXX_ROOT\*.xml"  
Get-ChildItem -Path $file -File -Filter *.xml | %{
    $text = gc $_.Fullname
    @{$true=($text | select -Skip 1);$false = $text}[($text[0] -like '*1TRANS*')] | Set-Content -Path $_.FullName -Encoding UTF8  
}
epsodus
epsodus 15.04.2020 um 12:25:37 Uhr
Goto Top
Hi, jetzt sieht die Datei wie folgt aus:

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:auth.031.001.01">
<FinInstrmRptgStsAdvc>
<StsAdvc>
<MsgRptIdr>RL101xx579368</MsgRptIdr>

mit der Zeile 1TRANS, wurden mit dem Hinweis von cabrina, die ersten 2 Zeilen entfernt.
In einer datei ohne 1Trans wurde die erste zeile entfernt
143728
143728 15.04.2020 aktualisiert um 12:43:05 Uhr
Goto Top
Nö es wird nur eine Zeile entfernt, siehst du ja daran
($text | select -Skip 1)
!

In deinem Fall steht bei dir der Text vor dem XML Tag zusammen in einer Zeile!

Mach es einfach so dann ist das mit den Zeilen egal und es wird nur das reine XML extrahiert
$file = "$XXXX_ROOT\*.xml"  
Get-ChildItem -Path $file -File -Filter *.xml | %{
    [regex]::match((gc $_.Fullname -raw),'(?ism)<\?xml.*').Value | Set-Content -Path $_.FullName -Encoding UTF8  
}
epsodus
epsodus 15.04.2020 um 12:33:22 Uhr
Goto Top
Hi, ersteinmal Danke.

Dann, muss ich sagen, ja Du hast RECHT.

Zu meiner Seite, Dummheit muss bestraft werden.
Ich hatte im Script vergessen, meinen originale-Code zu entfernen, also werden 2 Zeilen ausgeschnitten.

DANKE, es funktioniert, habe jetzt etwas dazu gelernt.