Még egy gyors lecke az XML kereséséről.
Egy ilyen XML-csomópont:
<server name="DomainController1"></server>
A nevet használja attribútumként. Épp most írtam egy bejegyzést arról, hogyan keressük az XML-t a csomópont attribútuma alapján.
De ez semmit sem ér a csomópont tényleges szövegértékével szemben.
<server>DomainController1</server>
Teljesen más fenevad. A trükk itt a “text()” módszer használata.
$XML | Select-Xml -Xpath '//server'
Ó, igen… Ez a jó dolog.
Egy pár szinttel lejjebb is kereshetsz. Íme egy minta egy Távoli asztali kapcsolatkezelő fájlból.
<group> <properties> <expanded>True</expanded> <name>DomainControllers</name> </properties> <logonCredentials inherit="None"> <profileName scope="File">myDomain\myAccount</profileName> </logonCredentials> <server> <properties> <name>DomainController1.myDomain.demo</name> </properties> </server></group>
Ha azt a GROUP csomópontot akarom megszerezni, amelyben a DomainController1.myDomain.demo nevű SERVER szerepel… Ezt XPath és Select-XML segítségével tehetem meg.
#This isn't exactly it, but it's a learning step to help you better understand.$xml | Select-XML -XPath '//group/server/properties/name'
Így kapom meg a csoportban lévő szerver név csomópontját. Látod milyen közel van ez? Nem tanulsz már?”
Magyarul ez az XPath utasítás így fordítható: “Add meg nekem a NAME csomópontot, amelynek szövegértéke DomainController1.MyDomain.demo, amely a properties nevű csomópont gyermekcsomópontja, amely a server nevű csomópont gyermeke, amely a group nevű csomópont gyermeke. AND, that group node could be anywhere in the XML.”
A zárójelen kívül definiáljuk azt a csomópontot, amelyet meg akarunk kapni. A zárójelen belül definiáljuk az oda vezető kiértékeléseket.
Mivel a GROUP csomópontot akarom, minden mást a zárójelek közé tömök.
$xml | Select-XML -XPath '//group'
Most ez adja vissza a group csomópontot. Készen áll a csomópont klónozására, az attribútumok frissítésére vagy egy gyermekcsomópont beszúrására, majd a frissített XML-objektum mentésére vissza az eredeti XML-fájlba.