PowerShell中如何用点标记法读取带属性的XML元素值?
PowerShell点标记法读取带属性XML元素的内部文本
解决方案
通过元素对象的InnerText属性或'#text'成员即可访问带属性元素的内部文本,点标记法的写法如下:
# 使用InnerText属性 Write-Host $xconf.Settings.Element1.InnerText # 或者使用#text成员 Write-Host $xconf.Settings.Element1.'#text'
原因说明
当XML元素包含属性时,PowerShell点标记法直接引用元素(如$xconf.Settings.Element1)会返回完整的XmlElement对象,而非默认解析内部文本。只有当元素无任何属性时,PowerShell才会自动简化返回其内部文本。
示例验证
带属性的XML文件
<?xml version="1.0" encoding="UTF-8"?> <Settings> <Element1 Attr1="AttrValue1">ElemValue1</Element1> <Element2>ElemValue2</Element2> </Settings>
修改后的PowerShell代码
[XML] $xconf = Get-Content $XmlFullFilename Write-Host $xconf.Settings.Element1.InnerText Write-Host $xconf.Settings.Element2
执行结果
ElemValue1 ElemValue2
补充提示
InnerText是.NETXmlElement类的标准属性,会返回元素及其所有子元素的串联文本,适用于绝大多数场景。'#text'是PowerShell针对XML节点文本内容的特殊访问方式,直接指向元素的文本节点,在元素无嵌套子元素时,效果和InnerText完全一致。
内容的提问来源于stack exchange,提问作者Dotmax
相关产品推荐
相关产品推荐

