PowerShell脚本中XML变量赋值失败问题求助
PowerShell XML解析脚本返回Null的解决方法
问题根源在于**Get-Content默认返回的是字符串数组**:交互式IDE环境中PowerShell会隐式帮你把字符串内容解析成XML对象,但脚本执行时不会自动做这个转换——你的$Data本质是字符串数组,访问.FILE_INFO这类XML属性自然返回Null。
解决方法有两种,任选其一即可:
方法1:强制将读取内容转换为XML类型
在赋值时直接用[xml]类型转换器,让PowerShell明确知道要处理XML数据:
[xml]$Data = Get-Content ./my_XML.xml [string]$Xml_Status = $Data.FILE_INFO.STATUS [string]$Xml_Title = $Data.FILE_INFO.TITLE [string]$Xml_StartDate = $Data.FILE_INFO.STARTDATE [string]$Xml_EndDate = $Data.FILE_INFO.ENDDATE write-host "DATA = $Data" write-host "Xml_Status: $Xml_Status"
如果XML文件较大,建议加上-Raw参数一次性读取整个文件为单字符串,提升效率:
[xml]$Data = Get-Content ./my_XML.xml -Raw
方法2:使用Select-Xml Cmdlet(适合复杂XML查询)
如果后续需要更灵活的XML节点查询,用Select-Xml更规范:
# 读取XML内容并定位目标节点 $xmlContent = Get-Content ./my_XML.xml -Raw $fileInfoNode = (Select-Xml -Content $xmlContent -XPath "//FILE_INFO").Node # 提取字段 [string]$Xml_Status = $fileInfoNode.STATUS [string]$Xml_Title = $fileInfoNode.TITLE [string]$Xml_StartDate = $fileInfoNode.STARTDATE [string]$Xml_EndDate = $fileInfoNode.ENDDATE write-host "Xml_Status: $Xml_Status"
补充说明
交互式环境(比如PowerShell IDE的命令行)中,当你直接输出$Data时,PowerShell会尝试自动识别内容格式并转换类型,但脚本执行是严格按代码逻辑处理的,必须显式声明XML类型才能正确访问节点属性。
内容的提问来源于stack exchange,提问作者Solaris_Guy
相关产品推荐
相关产品推荐

