2017-10-27 25 views
0

PowerShellを使用して設定ファイルを編集しています。次のように正確に出力する必要があります。 "<FieldDelimiter> &#9; </FieldDelimiter >"。もちろん、タブ文字を翻訳してタブ(白い空白)を書いています。私が得た最も近いものは、 "<FieldDelimiter> & amp;#9; </FieldDelimiter >"です。どのようにしてアンパサンド自体にファイルを書き込むことができますか?PowerShellからXMLで生の特殊文字を出力する

私は、ファイルに読んでいます:

[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) 

は、ファイルを保存します。

​​

答えて

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; 
+0

出力は、元の投稿に記載されているようになります。私はあなたが示したことを試しました。私はPowerShellのためのバッククイック ""文字であり、それは動作しませんそれをエスケープしようとしました。私も$#38を使って試しました。上記のようにファイルに書き込まれます。 –

+0

@AndrewHoltsclaw確かに私には分かりませんが、なぜこの形式で出力するのが "いいえ"なので、結果の内部テキスト「&#9;」をxmlパーサーで照会すれば、「 」私はあなたが欲しいと思うもの。 – zdan

+0

これはSSRS設定ファイルです。 SSRSは をタブ文字として扱いますが、&#9は扱いません。タブ文字として(私はそれをテストした)。私は のほかに他の許容されるタブ文字があるかどうかはわかりませんが、そこにあるものを知っています(&#9)。 が受け入れ可能であることを考慮すると、HTMLエンティティを期待しているように見えるので、私が出力した内容にかかわらず、誰かがSSRSのもう1つの許容タブ文字を知っていない限り、 '&'のような単一のアンパサンドを単に書く方法を理解する必要があります設定ファイル。 –

0

更新:
XMLのアンパサンド文字をエンコードせずに出力する方法については回答できませんでした。プロジェクトの時間がなくなりました。 、それは動作します)。

ファイルをもう一度読み込み、「& amp;」に置き換えました。

$config = (Get-Content $configFilePath) 
$newConfig = $config.Replace('&amp;', '&') 
Out-File -FilePath $configFilePath -InputObject $newConfig 
関連する問題