如何使用 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.

底部部分描述的技术