Abstractions all the way down.
Powershell XML
Visa signatur
Hej! Har börjat sätta in mig i Powershell men har nu fastnat och kommer inte riktigt lös.
Har en XML fil med data i:
<Databas>
<Dator>
<Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script2.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator2</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
</Databas>
Om jag nu vill ta-bort alla element där datornamn = "Dator1", hur gör jag då?
Har provat att googla runt men det fungerar inte eller så har dom gjort: <Dator name=Test > och då stämmer det inte.
Lösningarna som finns på google innehåller oftast SelectSingleNode och RemoveChild eller XCOPY (kommer inte riktigt ihåg) men det är ingen som riktigt passar in
/Erilid66
@erilid66: Du kan använda XPath för att hämta ut information från XML-dokument; det är ett universellt språk som är användbart att behärska om man arbetar mycket med XML, och inget som är begränsat till PowerShell. En fråga som identifierar alla <Dator>
-element som har en undernod <Datornamn>
med textinnehållet "Dator1"
skulle se ut så här: //Dator[./Datornamn="Dator1"]
.
Exempel för PowerShell:
$doc = [XML](Get-Content "example.xml")
$doc.SelectNodes("//Dator[./Datornamn='Dator1']") | %{
$_.ParentNode.RemoveChild($_)
}
$doc.OuterXml
Abstractions all the way down.
Tack så jätte mycket för hjälpen!
@tunnelsork: Scriptet funkar jättebra men det verkar göra om strukturen när man sparar den i XML filen.
<Databas>
<Dator> <Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script2.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator2</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
</Databas>
Blir istället när man sparar den:
<Databas>
<Dator>
<Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator1</Datornamn>
<Programvara>C:\mapp\script2.bat</Programvara>
<Version>1</Version>
</Dator>
<Dator>
<Datornamn>Dator2</Datornamn>
<Programvara>C:\mapp\script.bat</Programvara>
<Version>1</Version>
</Dator>
</Databas>
Så batch kan inte söka i den eftersom strukturen ändrats. Har du något förslag på hur man kan göra för att den inte ska lägga till alla blanksteg i XML:en?
Tack på förhand!
Skickades från m.sweclockers.com
Copyright © 1999–2024 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.