Dobře, další rychlá lekce vyhledávání XML.
Vidíte, že uzel XML takto:
<server name="DomainController1"></server>
Používá název jako atribut. Právě jsem napsal příspěvek o tom, jak hledat XML podle atributu uzlu.
Ale to vám nebude nic platné proti skutečné textové hodnotě uzlu.
<server>DomainController1</server>
Úplně jiná potvora. Tady je trik v použití metody „text()“.
$XML | Select-Xml -Xpath '//server'
Aha, jo… To je dobrá věc.
Můžete také hledat o několik úrovní níže. Zde je ukázka ze souboru Správce připojení ke vzdálené ploše.
<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>
Pokud chci získat uzel GROUP, ve kterém je SERVER s názvem DomainController1.myDomain.demo… Mohu to udělat pomocí XPath a Select-XML.
#This isn't exactly it, but it's a learning step to help you better understand.$xml | Select-XML -XPath '//group/server/properties/name'
Takto získám uzel s názvem serveru, který je ve skupině. Vidíte, jak je to blízko? Copak se to už neučíte?“
V češtině se tento příkaz XPath překládá takto: „Dejte mi uzel NAME, který má textovou hodnotu DomainController1.MyDomain.demo, který je potomkem uzlu s názvem properties, který je potomkem uzlu s názvem server, který je potomkem uzlu s názvem group. A tento uzel group může být kdekoli v XML.“
Za závorkami definujeme uzel, který chceme získat. Uvnitř závorek definujeme vyhodnocení, jak se k němu dostat.
Protože chci uzel GROUP, všechno ostatní nacpu dovnitř závorek.
$xml | Select-XML -XPath '//group'
Nyní to vrátí uzel group. Můžete uzel klonovat, aktualizovat atributy nebo vložit podřízený uzel a aktualizovaný objekt XML uložit zpět do původního souboru XML.