【问题标题】:how to read an xml node text with spaces using powershell如何使用powershell读取带有空格的xml节点文本
【发布时间】:2017-06-21 00:51:43
【问题描述】:

我想从我的配置文件中读取一个 XML 节点的文本。为此,我使用 Xpath 来读取这些值。配置值之一是它的内容之间有空格,所以当我读到它只是将值返回到空白处。 我的配置文件名和内容如下 配置.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结束标签有错误;缺少/。尚未编辑,因为这可能与您的问题有关。对我来说,我得到了完整的字符串“ARTL_Is Correction_Rewind_Report”。您使用的是哪个版本的 PowerShell?
  • @gms0ulman:谢谢。在帖子中,我错过了结束标签。但在原始的 xml 文件中它就在那里。刚刚重新访问了整个 ps 代码,发现 split 函数用于将值拆分为空格作为分隔符。因此得到了该部分值。

标签: xml powershell xpath


【解决方案1】:

您面临的问题是因为似乎缺少关闭标记。我不知道这是不是笔误。但是当我把它放在那里并试图以 XML 解析的形式读取内容时,我能够检索它。

你可以试试这个:

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

我在 PS 版本 4 中仅供参考。也请检查PS版本

【讨论】:

    【解决方案2】:

    由于您已经在使用 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属性只是一个字符串,不应该关心空格。

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 2016-12-22
      • 2015-01-15
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多