在XML和输出中创建计数循环

时间:2015-03-05 17:23:00

标签: xml powershell count

<?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"}
          }     
       }

1 个答案:

答案 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/

干杯!