Powershell String in XML-Node ersetzen
Hi,
In meinem Script Clone ich einzelne XML Nodes mit Unternodes und versuche darin Strings zu ersetzen. Allerdings gehen mir die Ideen aus wie das zu realisieren wäre.... Mit OuterXML bekomme ich zwar eine string. Den kriege ich aber nicht zurück in ein XML-Node Format...
XML:
Powershell:
In meinem Script Clone ich einzelne XML Nodes mit Unternodes und versuche darin Strings zu ersetzen. Allerdings gehen mir die Ideen aus wie das zu realisieren wäre.... Mit OuterXML bekomme ich zwar eine string. Den kriege ich aber nicht zurück in ein XML-Node Format...
XML:
<?xml version="1.0" encoding="utf-8"?>
<Document>
<Engineering version="V1.6" />
<DocumentInfo>
</DocumentInfo>
<SW.Blocks.FC ID="0">
<AttributeList>
</AttributeList>
<ObjectList ID="F">
<MultilingualText ID="1" CompositionName="Comment">
</MultilingualText>
<SW.Blocks.CompileUnit ID="StrToReplaceTwo" CompositionName="CompileUnits">
<AttributeList Name="StrToReplace">
Kommentar
</AttributeList>
<ObjectList> StrToReplace</ObjectList>
</SW.Blocks.CompileUnit>
<SW.Blocks.CompileUnit ID="B" CompositionName="CompileUnits">
<ObjectList>
</ObjectList>
</SW.Blocks.CompileUnit>
<MultilingualText ID="12" CompositionName="Title">
<ObjectList>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.FC>
</Document>
Powershell:
$csv =@"
'StrToReplace','StrToReplaceTwo'
'NewString','NewString2'
"@
$csv>"F:\OPN\Test.csv"
$CSVData=Import-Csv "F:\OPN\Test.csv"
$CSVData| Format-Table
$CSVSpalten = $CSVData | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty 'Name'
$Obj_reseve| Format-Table
# xml Objekt erstellen
$xml = New-Object XML
# xml laden
$xml.Load('F:\OPN\IN_Test.xml')
$oldNode =$xml.SelectNodes("//ObjectList")
foreach($Zeile in $CSVData){
foreach($Spalte in $CSVSpalten)
{
$NewNode = $oldNode.clone()
#Attribut-Werte ersetzen ??? WILDCARD für Attributnamen
$NewNode.SelectNodes("//*[contains(@*,$Spalte)]")|ForEach-Object{foreach ($attr in $_.Attributes){$attr=$Zeile.$Spalte}}
#InnerText ERsetzen
$NewNode -replace $Spalte,$Zeile.$Spalte
}
#$NewNode.ID=($NewNode.ID+'00').ToString()
# hänge den kopierten Knoten im selben Parent wie vom Original wieder ins XML ein
$oldNode.ParentNode.InsertAfter($NewNode,$oldNode)
}
$xml.Save('F:\OPN\Out_Test.xml')
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1331039454
Url: https://administrator.de/contentid/1331039454
Ausgedruckt am: 19.12.2024 um 10:12 Uhr
1 Kommentar