我需要将xml值设置为换行符转义码
<Variable>Foo 
 Bar</Variable>
我使用get-content创建xml对象并尝试使用以下方法分配变量
$qux = $("Foo 
 Bar")
$xml = [xml](Get-Content $xmlpath)
$xml.Variable = $qux
$xml.Save($tlpath)
$xml.Close
我尝试使用&amp; amp代替&amp;,使用单引号和反斜杠,我似乎无法阻止代码转换&amp; &amp; amp和吐出以下xml
<Variable>Foo &#xA; Bar</Variable>
绕过powershell转换转义字符的最佳方法是什么?
答案 0 :(得分:1)
指定普通的多行字符串:
$xml.Variable = "Foo`nBar"
或者将变量作为XML节点访问并分配一个XML字符串,该字符串将转换为普通的换行符:
$xml['Variable'].innerXml = "Foo
Bar"
.NET framework XML类将新行字符保存为实际新行inside text nodes,并将内部属性保存为实体。这意味着我们需要在编写之前对XML输出进行后处理:
$xml = [xml]::new()
$xml.Load('r:\1.xml')
$xml.Variable = "Foo`nBar"
# encode 
 inside text nodes and both 
 
 inside attributes
$xmlSettings = [Xml.XmlWriterSettings]::new()
$xmlSettings.NewLineHandling = [Xml.NewLineHandling]::Entitize
$sb = [Text.StringBuilder]::new()
$xmlWriter = [System.Xml.XmlWriter]::Create($sb, $xmlSettings)
$xml.Save($xmlWriter)
$sb.ToString().Replace("`n", '
') | Out-File r:\2.xml -Encoding utf8
注意:在PowerShell 2.0而不是[some.class]::new()
中使用New-Object some.class