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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.