Permalänk
Medlem

Powershell XML

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

Permalänk
Legendarisk

@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

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Tack så jätte mycket för hjälpen!

Permalänk
Medlem

@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