ich eine XML-Datei in folgendem Format haben:Entfernen XML Knoten In Powershell Entfernt Extra-Tags, die ich benötige
<?xml version="1.0" encoding="utf-8"?>
<factory>
<map>
<add key="Audit" assembly="Python.Platform.Core.dll" class="Python.Core.Audit.Services.Audit">
<parameter name="configFilePath" class="string" value="Config\Audit\AuditConfiguration.xml" />
</add>
<add key="Security.Password" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Security.Services.PasswordSecurityMD5">
</add>
<add key="Security.Password.Local" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Security.Services.PasswordSecurityMD5">
</add>
<add key="Guest.Registration" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Guest.Services.DbGuestRegistration">
<parameter name="registrationStoredProcedure" class="string" value="AddNewGuest" />
<parameter name="updateEncodedKeyStoredProcedure" class="string" value="UpdateGuestEncodedKey" />
<parameter name="unregistrationStoredProcedure" class="string" value="DeleteGuest" />
<parameter name="DeleteExpiredGuestStoredProcedure" class="string" value="DeleteExpiredGuest" />
<parameter name="defaultValidDays" class="int" value="30" />
</add>
</map>
</factory>
Mein Ziel ist es, diesen Abschnitt zu entfernen:
<add key="Audit" assembly="Python.Platform.Core.dll" class="Python.Core.Audit.Services.Audit">
<parameter name="configFilePath" class="string" value="Config\Audit\AuditConfiguration.xml" />
</add>
Die Powershell-Skript I ‚m ausgeführt ist wie folgt:
$path = "C:\testing\myxml.xml"
[Xml]$myxml = Get-Content -Path $path -Raw
$old = $myxml.SelectSingleNode("/factory/map/add[@key='Audit']")
$parent = $old.ParentNode
[void] $parent.RemoveChild($old)
$myxml.save($path)
Unfortu Wenn ich es ausführe, entfernt es auch jedes schließende Tag von jedem Add-Knoten, der keinen untergeordneten Parameter-Knoten hat. Anstatt also nur den Abschnitt zu löschen ich löschen möchten (was es tut), es sieht nun wie folgt aus:
<?xml version="1.0" encoding="utf-8"?>
<factory>
<map>
<add key="Security.Password" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Security.Services.PasswordSecurityMD5">
<add key="Security.Password.Local" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Security.Services.PasswordSecurityMD5">
<add key="Guest.Registration" assembly="OpenContent.Platform.Core.dll" class="OpenContent.Core.Guest.Services.DbGuestRegistration">
<parameter name="registrationStoredProcedure" class="string" value="AddNewGuest" />
<parameter name="updateEncodedKeyStoredProcedure" class="string" value="UpdateGuestEncodedKey" />
<parameter name="unregistrationStoredProcedure" class="string" value="DeleteGuest" />
<parameter name="DeleteExpiredGuestStoredProcedure" class="string" value="DeleteExpiredGuest" />
<parameter name="defaultValidDays" class="int" value="30" />
</add>
</map>
</factory>
Vorschläge, wie dies zu umgehen, ohne entfernen die zusätzlichen schließenden Tags zu laufen?
Hm ..., die nicht schien alles ändern. –
Bei weiteren Untersuchungen glaube ich nicht, dass es jemals ein Problem gab ... Ich hatte damit begonnen, eine Sicherungskopie der Datei myxml.xml.original zu erstellen. Nachdem ich die Änderungen vorgenommen habe, habe ich myxml.xml.original mit myxml.xml verglichen ... Anscheinend ist es CompareIt, das diese Zeile nicht mochte ... Wenn ich in die Datei schaue, sind die Tags definitiv da, aber CompareIt tut es anscheinend nicht wie XML-Dateien. –
@ChristopherCass Könnte wegen der Unterschiede in Leerzeichen dann sein –