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

PowerShell读取XML中SolutionPath节点内容到变量的方法

PowerShell读取XML节点内容的正确方法

问题场景

已通过以下命令读取XML文件:

[xml]$xml = Get-Content -Path '.\AppInfo.xml'

需要获取目标节点SolutionPath的内容(值为C:\Users\Public\Documents\Projects\Programm\),但错误尝试了带命名空间的写法,寻求正确实现方式。

目标XML内容

<?xml version="1.0"?>
<ProjectRuntimeInfo xmlns:xsd="http://www.test.org/20/test" xmlns:xsi="http://www.test.org/20/test">
  <Guid>37968228-1bc9-4b84-9eaa-cf0b7ef1c70e</Guid>
  <FileVersion>8.05.5006.24</FileVersion>
  <LastFullPublishDate>2023-10-06T14:00:01.8704004+02:00</LastFullPublishDate>
  <SolutionPath>C:\Users\Public\Documents\Projects\Programm\</SolutionPath>
  <SolutionName>Produktion</SolutionName>
  <LastUser>Administrator</LastUser>
  <MasterProjekt>Produktion</MasterProjekt>
</ProjectRuntimeInfo>

错误尝试的写法

$xml.ProjectRuntimeInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance".SolutionPath

正确实现方法

直接层级访问(推荐)

你的XML仅定义了命名空间前缀,但目标节点SolutionPath并不属于任何带前缀的命名空间,因此直接通过对象层级访问即可:

# 获取节点内容并保存到变量
$solutionPath = $xml.ProjectRuntimeInfo.SolutionPath

# 验证输出
Write-Host $solutionPath

执行后会输出:C:\Users\Public\Documents\Projects\Programm\

错误原因说明

你之前的写法错误地将XML的命名空间属性直接拼接到PowerShell变量访问路径中,这不符合PowerShell处理XML对象的语法规则。只有当节点属于默认命名空间(即根节点使用xmlns="..."且无前缀)时,才需要额外处理命名空间,当前场景完全不需要。

扩展:处理带默认命名空间的XML(可选)

如果遇到根节点带有默认命名空间的XML(例如<ProjectRuntimeInfo xmlns="http://www.test.org/20/test">),则需要使用Select-Xml搭配命名空间参数:

# 定义命名空间映射
$namespaceMap = @{ns = "http://www.test.org/20/test"}

# 定位目标节点
$targetNode = Select-Xml -Xml $xml -XPath "//ns:SolutionPath" -Namespace $namespaceMap

# 获取节点内容
$solutionPath = $targetNode.Node.InnerText

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:16