解析XML多参数

时间:2016-11-16 18:41:19

标签: xml powershell

我有一个脚本,它利用PowerShell来解析XML数据并导出为XLS格式。当XML不复杂时,该脚本可以工作。但是,当节点具有多个属性时,它不会。

目前,要获取我使用的节点属性:

$Switch = $xml.DC.Rack[$i] | %{$_.NetworkSwitch} | Select-Object -Unique

但是,我需要获取位置,地址和Vlan详细信息。以下是节点的示例:

<NetworkSwitch Location="ABC" Address="XX.XXX.XXX.XX" Vlan="YY" />

这是我PS1的副本:

$xmlFile = "D:\My.xml"
$xPath = "//Rack"
[xml]$xml = Get-Content $xmlFile -Raw

$NodeCount = $xml.SelectNodes($xPath).Count

for ($i = 1; $i -le $NodeCount; $i++) 
{
    $Switch = $xml.DC.Rack[$i] | %{$_.NetworkSwitch} | Select-Object -Unique
    Write-Host "$($Switch)"
}

2 个答案:

答案 0 :(得分:0)

为什么不使用Select-XML?我没有完整的xml文档样本,但这可能符合您的需求。

$xml = @"
 <?xml version="1.0" encoding="utf-8"?>
 <Switches>
  <NetworkSwitch Location="ABC" Address="XX.XXX.XXX.XX" Vlan="YY" />
  <NetworkSwitch Location="DEF" Address="XX.XXX.XXX.XX" Vlan="ZZ" />
  <NetworkSwitch Location="GHI" Address="XX.XXX.XXX.XX" Vlan="XX" />
 </Switches>
"@
Select-Xml -Content $xml -XPath "//NetworkSwitch" | Select-Object -ExpandProperty Node

返回以下内容:

Location                             Address                              Vlan
--------                             -------                              ----
ABC                                  XX.XXX.XXX.XX                        YY
DEF                                  XX.XXX.XXX.XX                        ZZ
GHI                                  XX.XXX.XXX.XX                        XX

这些是您可以随意存储和操作的System.Xml.XmlElement对象。您还可以进一步优化XPath语句以仅检索必要的属性。例如,如果您只想将VLAN信息更改为:

,请使用上面的xml
Select-Xml -Content $xml -XPath "//NetworkSwitch/@Vlan" | Select-Object -ExpandProperty Node

#text
-----
YY
ZZ
XX

答案 1 :(得分:0)

首先无需确定机架数量。只需在SelectNodes()上使用适当的XPath表达式调用$xml,然后在输出中选择所需的属性:

$xml.SelectNodes('//Rack/NetworkSwitch') |
    Select-Object -Unique Location, Address, Vlan

如果您希望CSV格式的输出在Excel中导入,请将上述语句输入Export-Csv

... | Export-Csv 'C:\path\to\output.csv' -NoType