[英]how to read an xml node text with spaces using powershell
我想从我的配置文件中读取XML节点的文本。 为此,我使用Xpath读取值。 配置值之一是它的切线之间有一个空格,所以当我阅读它时,它只是将值返回到空白。 我的配置文件名和内容如下config.xml
<?xml version="1.0" encoding="UTF-8"?>
<OpsConfig>
<Tenant>mytenant_az1</Tenant>
<Client>XYZ</Client>
<ReviewID>a123456</ReviewID>
<ReferenceID>ARTL_Is Correction_Rewind_Report</ReferenceID>
<OpsConfig>
我可以成功读取标签ReferenceID以外的标签值。 下面是代码:
$configFile = "config.xml"
[xml]$confXml = Get-Content $configFile
$refIds = $confXml | Select-XML -XPath "//OpsConfig/ReferenceID"
Write-Host $refIds
变量$ refIds仅返回“ ARTL_Is”。 它会跳过空格之后的内容。 我尝试通过附加空格的六进制值,但仍未返回整个值“ ARTL_Is Correction_Rewind_Report”。
您面临的问题是因为似乎缺少了闭包标记。 我不知道这是不是错字。 但是,当我将其保留在那里并尝试以XML解析的形式读取内容时,我便能够检索它。
您可以尝试一下:
<OpsConfig>
<Tenant>mytenant_az1</Tenant>
<Client>XYZ</Client>
<ReviewID>a123456</ReviewID>
<ReferenceID>ARTL_Is Correction_Rewind_Report</ReferenceID>
</OpsConfig>
我在PS版本4中只是供参考。 请同时检查PS版本
由于您已经在使用Get-Content,因此只需调用变量即可获取其节点。
[Xml]$ConfXml = Get-Content ".\config.xml"
$RefIds = $ConfXml.OpsConfig.ReferenceID
Write "$RefIds"
如果您关心的是多个参考ID,则可以使用ForEach
解析它们
ForEach ($i in $ConfXml.OpsConfig.ReferenceID) { Do stuff with $i }
或者,
ForEach ($i in $ConfXml.OpsConfig) { Do stuff with $i.ReferenceID }
使用这种方法,变量中的xml属性只是一个字符串,不需要在乎空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.