从PowerShell输出XML中的原始特殊字符

时间:2017-10-27 18:26:57

标签: xml powershell special-characters

我正在使用PowerShell编辑配置文件。我需要输出以下内容:“< FieldDelimiter>	< / FieldDelimiter>”。当然,它想要翻译制表符并写一个标签(空格)。我得到的最接近的是它输出:“< FieldDelimiter>& amp;#9;< / FieldDelimiter>”,这是不好的。如何让它写入&符号本身的文件?

我正在阅读文件:

[xml]$xml = (Get-Content $configFilePath)  
...(skip some code)...

附加一些子元素:

$configuration = $xml.CreateElement("Configuration")
$newExtension = $xml.CreateElement("Extension")

$configuration.InnerXml = "
            <DeviceInfo>
                <FieldDelimiter>&#9;</FieldDelimiter>
                <UseFormattedValues>True</UseFormattedValues>
                <NoHeader>True</NoHeader>
                <FileExtension>txt</FileExtension>
            </DeviceInfo>"

$newExtension.AppendChild($configuration)
...(more code skipped)...
$xml.Configuration.Extensions.Render.InsertAfter($newExtension, $csvNode)

然后保存文件。

$xml.Save($configFilePath)

2 个答案:

答案 0 :(得分:0)

你可以逃避&号&

<FieldDelimiter>&amp;#9;</FieldDelimiter>

作为测试,我创建了这个脚本:

$x = [xml]@"
<DeviceInfo>
  <FieldDelimiter>&amp;#9;</FieldDelimiter>
  <UseFormattedValues>True</UseFormattedValues>
  <NoHeader>True</NoHeader>
  <FileExtension>txt</FileExtension>
</DeviceInfo>
"@
$x.Save("c:\temp\testEscape.xml")

然后我测试读取结果文件:

# C:\Temp> gc .\testEscape.xml
<DeviceInfo>
  <FieldDelimiter>&amp;#9;</FieldDelimiter>
  <UseFormattedValues>True</UseFormattedValues>
  <NoHeader>True</NoHeader>
  <FileExtension>txt</FileExtension>
</DeviceInfo>
# C:\Temp> $x = [xml](gc .\testEscape.xml)
# C:\Temp> $x.DeviceInfo.FieldDelimiter
&#9;

答案 1 :(得分:0)

更新:
我无法得到如何在没有编码的情况下简单地输出XML中的&符号的答案,而且我的项目时间已经不多了,所以这就是我所做的工作(不是首选答案,但它的确有效)。

我再次阅读该文件并更换了&#34;&amp; amp;&#34;用&#34;&amp;&#34;如下所示:

Branch.setUseTestBranchKey(true)