XML-Datei mit Powershell editieren, 2. Teil
Hallo zusammen,
habe hier aus dem Form eine Script-Zeile erhalten um ein XML-File zu editieren.
Läuft wunderbar.
Nun möchte ich bestimmte Werte des Attributs „SheetName“ nicht ändern sondern überspringen.
Mein Versuch:
Wirft leider eine Fehlermeldung:
if : Die Benennung "if" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den
Vorgang.
Hat jemand einen Tipp für mich?
Urspungs-Frage: XML-Datein per Script editieren
Besten Dank vorab!
Gruß JENS
habe hier aus dem Form eine Script-Zeile erhalten um ein XML-File zu editieren.
# Variable definieren
$prefix = "Bogen_"
# Zählervariable erstellen
$cnt = 0
$xml.SelectNodes('//default:Component[@SignatureName]',$ns) | %{$_.Component.SheetName = "$prefix$($cnt.toString().padleft(2,'0'))"; $cnt++}
Läuft wunderbar.
Nun möchte ich bestimmte Werte des Attributs „SheetName“ nicht ändern sondern überspringen.
Mein Versuch:
$xml.SelectNodes('//default:Component[@SignatureName]',$ns) | if ($_.Component.SheetName -eq "Bg_0") {$_.Component.SheetName = "Bg_0"} else | %{$_.Component.SheetName = "$prefix$($cnt.toString().padleft(2,'0'))"; $cnt++}
Wirft leider eine Fehlermeldung:
if : Die Benennung "if" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den
Vorgang.
Hat jemand einen Tipp für mich?
Urspungs-Frage: XML-Datein per Script editieren
Besten Dank vorab!
Gruß JENS
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 391494
Url: https://administrator.de/forum/xml-datei-mit-powershell-editieren-2-teil-391494.html
Ausgedruckt am: 22.12.2024 um 08:12 Uhr
13 Kommentare
Neuester Kommentar
Mal ein einfaches Beispiel:
Test.xml:
Ausgabe vorher, wenn du dir die Nodes ausgeben lässt:
Test1
Umschlag
Test2
Ausgabe nachher, wenn du dir die Nodes ausgeben lässt:
Bogen0
Umschlag
Bogen1
VG
Test.xml:
<?xml version="1.0" encoding="utf-8"?>
<Eintraege>
<SheetName>
Test1
</SheetName>
<SheetName>
Umschlag
</SheetName>
<SheetName>
Test2
</SheetName>
</Eintraege>
[XML]$Inhalt = get-content "C:\Temp\Test.xml"
$Inhalt.SelectNodes(//Eintraege/SheetName)
$Count = 0
$Inhalt.Eintraege.SheetName | %{
if($_ -match "Umschlag"){
# wenn der SheetName "Umschlag" lautet passiert nichts
}else{
$_ = "Bogen" + $Count++
}
}
Ausgabe vorher, wenn du dir die Nodes ausgeben lässt:
Test1
Umschlag
Test2
Ausgabe nachher, wenn du dir die Nodes ausgeben lässt:
Bogen0
Umschlag
Bogen1
VG
$xml.SelectNodes('//default:Component[@SignatureName]',$ns) | %{
If ($_.Component.SheetName -ne "Bg_0"){
$_.Component.SheetName = "$prefix$($cnt.toString().padleft(2,'0'))"
$cnt++
}
}
Stichwort xPath, das Tutorial dazu hatte ich dir gepostet. Lesen scheint nicht deine Stärke.
P.s. Wie wärs erst mal mit mal Grundlagen aneignen? Dann musst du nicht jeden Furz erfragen.
Jetzt jetzt stehe ich vor dem nächsten Problem:
Neue Frage neuer Thread, ist das so schwer?P.s. Wie wärs erst mal mit mal Grundlagen aneignen? Dann musst du nicht jeden Furz erfragen.
$xml.SelectNodes("//default:Media[@MediaType = 'Paper']",$ns)
siehe:
https://www.w3schools.com/xml/xpath_syntax.asp
//title[@lang='en'] Selects all the title elements that have a "lang" attribute with a value of "en"
Soweit solltest du selbst denken können.