如何在PowerShell中提取具有相同子名称但不同值的子节点?

如何在PowerShell中提取具有相同子名称但不同值的子节点?,powershell,xml-parsing,Powershell,Xml Parsing,在XML文件中,有一些子节点具有相同的节点名,但具有不同的值,如示例所示 我已经尝试了我在互联网上能找到的东西,但是,唉,没有任何效果。此外,我还不熟悉PowerShell,我已经看到它非常强大,但这很困难,因为您可以在示例中看到特定的子节点 chdir(“\\folder”) [xml]$XmlDocument=获取内容“football.xml” 第一次尝试: foreach($XmlDocument.entities.entity.ext中的($s){ $attribs=$s.Attri

在XML文件中,有一些子节点具有相同的节点名,但具有不同的值,如示例所示

我已经尝试了我在互联网上能找到的东西,但是,唉,没有任何效果。此外,我还不熟悉PowerShell,我已经看到它非常强大,但这很困难,因为您可以在示例中看到特定的子节点

chdir(“\\folder”)
[xml]$XmlDocument=获取内容“football.xml”
第一次尝试:

foreach($XmlDocument.entities.entity.ext中的($s){
$attribs=$s.Attributes
如果($attribs='Alias'){
$s
}
}
不确定我在这里做什么,但我试图循环遍历该文件以获取
子节点中的子节点“Alias”的值

然后我尝试了以下方法:

$XmlDocument.SelectNodes(“//entities/entity/ext”)| ForEach对象{
新对象-类型PSObject-属性@{
Name=$s\ux.Name
别名=$s\u.Alias
}
}
但这也不起作用。我还尝试将所有内容导出到CSV:

$XmlDocument.entities.ChildNodes|
导出Csv“footballers.Csv”-NoTypeInformation-分隔符:“;”-编码:UTF8
这非常有效,但是
子节点的输出是聚合的错误消息

因此,输入如下所示。可以看出,
节点也不是均匀分布的,这使得它更加困难。有时在某些实体中存在某些
节点,有时则不存在


罗纳尔多,克里斯蒂亚诺
02/05/1985
葡萄牙
罗尼
187
葡萄牙语
尤文图斯
皇家马德里
CR7
梅西,莱昂内尔
06/24/1987
阿根廷
拉普尔加
170
阿根廷人
巴塞罗那足球俱乐部

然后我想将所有这些转换成一个CSV文件,其中包含输出中的所有信息。

您的第二次尝试几乎成功了,但是您的XPath表达式选择了所有
节点。您需要的是一个表达式,它选择所有
节点,这些节点包含一个子节点
,其属性
name
的值为
Alias

//entities/entity[ext[@name='Alias']]
然后,您可以像这样构建自定义对象:

New-Object -Type PSObject -Property @{
    Name  = $_.name
    Alias = $_.SelectSingleNode("./ext[@name='Alias']").'#text'
}

在不使用XPath的情况下,这应该可以工作:

[xml]$XmlDocument = Get-Content "football.xml"

$data = foreach ($entity in $XmlDocument.entities.entity) {
    [PSCustomObject]@{
        'Name' = $entity.name
        'Alias' = ($entity.ext | Where-Object { $_.name -eq 'Alias' }).InnerText   # or use .'#text'
    }
}

$data | Export-Csv -Path '<PATH AND FILENAME FOR THE EXPORTED CSV FILE' -NoTypeInformation -Delimiter ';' -Encoding UTF8

谢谢西奥,这可能会起作用,但我目前无法测试。安斯加的安萨成功了。谢谢你的选择!
Name               Alias   
----               -----   
Ronaldo, Cristiano Ronnie  
Messi, Lionel      La Pulga