W porządku, kolejna szybka lekcja znajdowania XML.

Widzisz, węzeł XML taki jak ten:

<server name="DomainController1"></server>

Używa nazwy jako atrybutu. Właśnie napisałem post o tym, jak przeszukiwać XML według atrybutu węzła.

Ale to nie zrobi ci nic dobrego przeciwko rzeczywistej wartości tekstowej węzła.

<server>DomainController1</server>

Totalnie inna bestia. Sztuczka polega na użyciu metody „text()”.

$XML | Select-Xml -Xpath '//server'

Oh yeah… To są dobre rzeczy.

Możesz również szukać kilka poziomów niżej. Oto próbka z pliku Remote Desktop Connection Manager.

<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>

Jeśli chcę uzyskać węzeł GROUP, w którym znajduje się SERVER o nazwie DomainController1.myDomain.demo… Mogę to zrobić za pomocą XPath i 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'

Tak można uzyskać węzeł nazwy serwera, który znajduje się w grupie. Widzisz, jak blisko to jest? Czy już się nie uczysz?

Po angielsku, to wyrażenie XPath tłumaczy się na „Daj mi węzeł NAME, który ma wartość tekstową DomainController1.MyDomain.demo, który jest węzłem potomnym węzła o nazwie właściwości, który jest dzieckiem węzła o nazwie serwer, który jest dzieckiem węzła o nazwie grupa. I, ten węzeł grupy może być gdziekolwiek w XML.”

Definiujemy poza nawiasami węzeł, który chcemy otrzymać. Definiujemy wewnątrz nawiasów ewaluacje, aby się tam dostać.

Ponieważ chcę węzeł GROUP, zamierzam upchnąć wszystko inne wewnątrz nawiasów.

$xml | Select-XML -XPath '//group'

Teraz to zwraca węzeł group. Możesz sklonować ten węzeł, zaktualizować atrybuty lub wstawić węzeł potomny, a następnie zapisać zaktualizowany obiekt XML z powrotem do oryginalnego pliku XML.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.