<?xml version="1.0"?>
<!DOCTYPE xml>
</object> -<object type="host">
<property value="4" name="id"/>
<property value="briu065a" name="name"/>
<property value="2" name="port_count"/>
<property value="generic" name="type"/>
<property value="11111111111111111111111111111111111" name="mask"/>
<property value="4" name="iogrp_count"/>
<property value="offline" name="status"/>
<property value="10000000C94EA2C9" name="WWPN"/>
<property value="0" name="node_logged_in_count"/>
<property value="offline" name="state"/>
<property value="10000000C94EC64E" name="WWPN"/>
<property value="0" name="node_logged_in_count"/>
<property value="offline" name="state"/>
<property value="10000000C94ECFEF" name="WWPN"/>
<property value="0" name="node_logged_in_count"/>
<property value="offline" name="state"/>
</object>
<object type="hostio_grp">
<property value="4" name="host_id"/>
<property value="0" name="id"/>
<property value="iogrp_ab" name="name"/> </object>
嗨,我想知道你能不能在这里给我一些指导。我正在阅读上面的XML数据并报告给csv文件。我希望获取XML文件中的每个值并将其存储为单个变量。
对于type =“host”下的单个条目,例如“name”和“mask”,我可以轻松地将值提取到单个变量中,但是当存在多个具有相同名称的值时,例如“WWPN”我是发现难以将这些多个条目捕获到单独的变量中。
从下面的代码中,我希望这样的东西能起作用:
if ($type -eq "host" -and $name -eq "WWPN" ) {$wwpn[$cnt] = $value.$cnt++
add-content $hostinfo "$hname,$wwpn(1),$wwpn(2),$wwpn(3)"}
我希望csv输出基本上看起来像这样:
hname,wwpn1,wwpn2,wwpn3 briu065a,10000000C94EA2C9,10000000C94EC64E,10000000C94ECFEF
我对Powershell很新,所以任何指导都会非常感激。以下是我的代码:
$files = Get-ChildItem $XMLPath\*.xml
foreach ($file in $files)
{
$xmlOutput=select-xml -path $file -XPath *
foreach ($object in $xmlOutput.node.object)
{
$type=$object.type
foreach ($property in $object.property)
{
$name=$property.name
$value=$property.value
if ($type -eq "host" -and $name -eq "name" ) {$hname = $value}
if ($type -eq "host" -and $name -eq "WWPN" ) {$wwpn = $value
add-content $hostinfo "$hname,$wwpn"}
}
}
答案 0 :(得分:0)
我不确定你要做什么,但这似乎有效:
$xmlOutput = New-Object XML
$files = Get-ChildItem $XMLPath\*.xml
foreach ($file in $files) {
$xmlOutput.Load($file.FullName)
foreach ($object in $xmlOutput.object) {
$type = $object.type
$line = $null
foreach ($property in $object.property) {
If ($type -eq "host") {$line += $property.value + ","}
}
If ($line -ne $null) {$line = $line.TrimEnd(",")}
Add-Content $hostinfo "$line"
}
}
我建议进一步阅读,但无法找到最能帮助我的文章。这是一个:http://www.powershellmagazine.com/2013/08/19/mastering-everyday-xml-tasks-in-powershell/
干杯!