【问题标题】:Modify xml while preserving whitespace在保留空格的同时修改 xml
【发布时间】:2021-06-20 15:23:19
【问题描述】:

我在尝试替换 XML 文件中的属性同时保留空格时遇到了几个问题。

尝试 1

$xml = [xml](get-content data.xml)
$xml.Path.To.Attribute = $value
set-content data.xml [String]$value

结果:不重要的空格(即换行符)被删除

尝试 2

$xml = new-object xml
$xml.PreserveWhitespace = true
$xml.PreserveWhitespace

结果:PreserveWhitespace 仍然是 false

尝试 3

$xml = get-content data.xml
$xml = [regex]::replace($xml, "pattern", "replacement")
set-content data.xml $xml

结果:[regex]::replace 弄乱了行尾

我在这儿吃药吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    问题都是相关的:Get-Content 返回文本文件的行,而不是文本本身。当转换回字符串时,这些行会直接合并。

    最好的解决方案是使用:

    $xml = [xml]([System.IO.File]::ReadAllText("data.xml"))
    

    【讨论】:

      【解决方案2】:

      这不起作用,因为 PreserveWhiteSpace 是一个布尔值:

      $xml = new-object xml
      $xml.PreserveWhitespace = true
      $xml.PreserveWhitespace
      

      用途:

       xml.PreserveWhitespace = $true
      

      【讨论】:

        【解决方案3】:

        默认情况下,空行会被忽略,为了保留它们,您可以在读取文件之前更改PreserveWhitespace 属性:

        创建 XmlDocument 对象并配置 PreserveWhitespace:

        $xmlDoc = [xml]::new()
        $xmlDoc.PreserveWhitespace = $true
        

        加载文档:

        $xmlDoc.Load($myFilePath)
        

        $xmlDoc.LoadXml($(Get-Content $myFilePath -Raw))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-16
          • 1970-01-01
          • 1970-01-01
          • 2018-09-23
          • 1970-01-01
          相关资源
          最近更新 更多