epsodus
Goto Top

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

Content-Key: 564872

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

Printed on: May 7, 2024 at 02:05 o'clock

Mitglied: 143728
Solution 143728 Apr 15, 2020 at 10:17:17 (UTC)
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  
}
Member: epsodus
epsodus Apr 15, 2020 at 10:25:37 (UTC)
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
Mitglied: 143728
143728 Apr 15, 2020 updated at 10:43:05 (UTC)
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  
}
Member: epsodus
epsodus Apr 15, 2020 at 10:33:22 (UTC)
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.