如何使用 Powershell 枚举 XML 元素的属性
How to use Powershell to enumerate attributes of an XML element
我有一个 XML 文件,其结构如下:
<XMLFile>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff100='data'</Thing>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff85='data'</Thing>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff91='data'</Thing>
.
.
.
</XMLFile>
每个Thing 中的属性并不总是相同的,有些可能存在有些可能不存在。我像这样将文件读入 $xmldata 中:
[xml]$xmldata = Get-Content -Path xmlfilename
我像这样访问 $xmldata 中的每个 'Thing':
$xmldata.XMLFile.Thing
我想使用类似
的方式枚举所有 Stuff 属性
$xmldata.XMLFile.Thing.ForEach({$_.??????})
我用什么代替问号来获取每个 'Thing' 中所有 'Stuff' 项的列表?
# Parse the XML file into a DOM.
[xml] $xmldata = Get-Content -Raw -LiteralPath xmlfilename
# Loop over the 'Thing' elements' attributes and emit them as
# custom objects with names and values.
$xmlData.XMLFile.Thing.Attributes.ForEach({
[pscustomobject] @{ Name = $_.Name; Value = $_.Value }
})
注意使用 -Raw
来加速将输入文件解析为 XML DOM。但是,稳健 解析 XML 文件以避免字符编码陷阱的方法需要 this answer.
底部部分描述的技术
我有一个 XML 文件,其结构如下:
<XMLFile>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff100='data'</Thing>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff85='data'</Thing>
<Thing Stuff1='data' Stuff2='data' Stuff3='data' .....Stuff91='data'</Thing>
.
.
.
</XMLFile>
每个Thing 中的属性并不总是相同的,有些可能存在有些可能不存在。我像这样将文件读入 $xmldata 中:
[xml]$xmldata = Get-Content -Path xmlfilename
我像这样访问 $xmldata 中的每个 'Thing':
$xmldata.XMLFile.Thing
我想使用类似
的方式枚举所有 Stuff 属性$xmldata.XMLFile.Thing.ForEach({$_.??????})
我用什么代替问号来获取每个 'Thing' 中所有 'Stuff' 项的列表?
# Parse the XML file into a DOM.
[xml] $xmldata = Get-Content -Raw -LiteralPath xmlfilename
# Loop over the 'Thing' elements' attributes and emit them as
# custom objects with names and values.
$xmlData.XMLFile.Thing.Attributes.ForEach({
[pscustomobject] @{ Name = $_.Name; Value = $_.Value }
})
注意使用 -Raw
来加速将输入文件解析为 XML DOM。但是,稳健 解析 XML 文件以避免字符编码陷阱的方法需要 this answer.