如何在PowerShell中提取具有相同子名称但不同值的子节点?
在XML文件中,有一些子节点具有相同的节点名,但具有不同的值,如示例所示 我已经尝试了我在互联网上能找到的东西,但是,唉,没有任何效果。此外,我还不熟悉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
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