繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM