You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell使用带多属性过滤的XPath提取XML属性值并导出到CSV

解决方案

你之前的5种写法的问题分别为:

  • AuthID1:直接返回了ext:id元素对象,未提取属性值,导出CSV时只会输出对象类型
  • AuthID2:select extension返回的是包含extension属性的自定义PS对象,不是纯文本值
  • AuthID3/4:XPath路径错误,extension是ext:id的属性而非子元素,用路径/extension会查找子节点,因此返回空
  • AuthID5:返回了XML属性对象,未提取其文本值,导出CSV时只会输出对象类型

你可以选择任意一种修正方案实现需求:

方案1:基于XPath属性查询直接取值

在你原有AuthID5的写法基础上,追加访问XML属性对象的Value属性即可拿到纯文本:

AuthID = $xmlData.SelectSingleNode("//ns:MyDocument/ext:asEntityIdentifier[@classCode='IDENT']/ext:id[@assigningAuthorityName='Some Auth Name']/@extension", $nsMngr).Value

方案2:PowerShell简化写法

利用PowerShell对XML对象的语法糖特性,拿到元素后直接点出属性值:

$idNode = $xmlData.SelectSingleNode("//ns:MyDocument/ext:asEntityIdentifier[@classCode='IDENT']/ext:id[@assigningAuthorityName='Some Auth Name']", $nsMngr)
AuthID = $idNode.extension

完整修正后的脚本示例

# 读取XML文件内容
[xml]$xmlData = Get-Content -Path "C:\temp\mytest.xml"

# 声明所需的XML命名空间
$nsMngr = New-Object System.Xml.XmlNameSpaceManager($xmlData.NameTable)
$nsMngr.AddNamespace("ns", $xmlData.DocumentElement.NamespaceURI)   # 默认命名空间
$nsMngr.AddNamespace("ext", "namespace1")

# 构造要导出的自定义对象,增加判空避免节点不存在时报错
$extAttr = $xmlData.SelectSingleNode("//ns:MyDocument/ext:asEntityIdentifier[@classCode='IDENT']/ext:id[@assigningAuthorityName='Some Auth Name']/@extension", $nsMngr)
$reqdData = [PSCustomObject]@{
    AuthID = $extAttr ? $extAttr.Value : ""
}

# 导出到CSV文件
$reqdData | Export-Csv -Path $extractFile -NoTypeInformation -Force -Append

内容的提问来源于stack exchange,提问作者Shell D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:15:04