在保留空格的同时修改xml

时间:2011-05-20 13:55:50

标签: powershell

我在尝试替换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弄乱了行尾

我在这里服用疯狂的药片吗?

3 个答案:

答案 0 :(得分:8)

问题都是相关的:Get-Content返回文本文件的行,而不是文本本身。当强制转换为字符串时,这些行将完全合并。

最好的解决方案是使用:

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

答案 1 :(得分:6)

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

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

使用:

 xml.PreserveWhitespace = $true

答案 2 :(得分:0)

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

创建 XmlDocument 对象并配置 PreserveWhitespace:

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

加载文档:

$xmlDoc.Load($myFilePath)

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