PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Powershell: Wie Liste mit Werten in ein Array


aths
2014-06-25, 16:15:23
Ich lese ein XML ein:

[xml]$ids = (new-object System.Net.WebClient).downloadstring($url)

Das XML hat eine Haupt-Node "sensors" und darin viele Subnodes "item".

Mit write-host $ids.sensors.item.innertext bekomme ich eine mit Leerzeichen getrennte Auflistung aller item-Inhalte. Kann man diese Liste ohne manuelles Auseinandernehmen (nach " " suchen, Substring abschneiden, ...) in ein Array bekommen?

Oder kann man direkt durch die Item-Nodes durchgehen?

Sephiroth
2014-06-25, 18:49:30
After you have an XML document, it is easy to walk through the nodes. This is especially true with Windows PowerShell 3.0 because it has the “automatic foreach” feature that I talked about in My Five Favorite PowerShell 3.0 Tips and Tricks.
http://blogs.technet.com/b/heyscriptingguy/archive/2012/09/13/use-powershell-to-simplify-access-to-xml-data.aspx

ansonsten bietet powershell auch mit xpath die möglichkeit elemente zu suchen bzw. über das ergebnis zu iterieren. -> https://stackoverflow.com/questions/13732715/loop-through-xml-elements


$xml = [xml]@"
<doc>
<foo SID='foosid' DISPLAYNAME="foodisp">
<bar SID='barsid' DISPLAYNAME="bardisp"/>
<baz>
<blech SID='blechsid' DISPLAYNAME="blechdisp"/>
</baz>
</foo>
</doc>
"@

$objs = @()
$nodes = $xml.SelectNodes("//*[@SID]")
foreach ($node in $nodes) {
$sid = $node.attributes['SID'].value
$dispName = $node.attributes['DISPLAYNAME'].value
$obj = new-object psobject -prop @{SID=$sid;DISPNAME=$dispName}
$objs += $obj
}
$objs

aths
2014-06-26, 11:19:01
Danke; es scheint einfacher zu gehen:

$Array = $ids.sensors.item.innertext -Split " "

Dann mit foreach ($id in $Array) durchlaufen.

Trotzdem vielen Dank! Als Powershell-Noob sehe ich noch nicht richtig durch.