如何使用powershell读取带空格的xml节点文本

时间:2017-06-19 13:11:09

标签: xml powershell xpath

我想从配置文件中读取XML节点的文本。为此,我使用Xpath读取值。其中一个配置值是在它的conetents之间有空间,所以当我读它时它只是将值返回到空白区域。 我的配置文件名和内容如下 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只返回&#34; ARTL_Is&#34;。它在空间之后跳过内容。我尝试通过附加空间的六进制值但仍然没有返回整个值&#34; ARTL_Is Correction_Rewind_Report&#34;。

2 个答案:

答案 0 :(得分:0)

您面临的问题是因为似乎缺少闭包标签。我不知道这是不是一个错字。但是当我把它保留在那里并尝试将内容读作XML解析时,我能够检索它。

你可以试试这个:

<OpsConfig>
    <Tenant>mytenant_az1</Tenant>
    <Client>XYZ</Client>
    <ReviewID>a123456</ReviewID>
    <ReferenceID>ARTL_Is Correction_Rewind_Report</ReferenceID>
</OpsConfig>

我在PS版本4只是FYI。请检查PS版本

答案 1 :(得分:0)

由于您已经在使用Get-Content,因此您可以调用该变量来获取其节点。

p

如果您的问题是多个参考ID,则可以使用[Xml]$ConfXml = Get-Content ".\config.xml" $RefIds = $ConfXml.OpsConfig.ReferenceID Write "$RefIds"

解析它们
ForEach

可替换地,

ForEach ($i in $ConfXml.OpsConfig.ReferenceID) { Do stuff with $i }

使用此方法,变量中的xml属性只是一个字符串,不应该关心空格。