0
XmlDocumentのインデントをフォーマットし、UTF-8エンコーディングを保持する小さな関数を記述しました。私のXmlWriterインスタンスをWriteContentToにすることができないという問題があります。私の実装はこれに間違っていますか?XmlDocument.WriteContentTo(xmlwriter)がストリームに書き込まない
function Format-XML ([xml]$xml, $indentChars = " ")
{
$xmlSettings = New-Object System.Xml.XmlWriterSettings
$xmlSettings.Indent = $True
$xmlSettings.IndentChars = $indentChars
$xmlSettings.Encoding = $global:Utf8NoBomEncoding
$xmlSettings.NewLineChars = "\r\n"
$xmlSettings.NewLineHandling = [System.Xml.NewLineHandling]::Replace
$xmlMemoryStream = New-Object System.IO.MemoryStream
$xmlWriter = [System.Xml.XmlWriter]::Create($xmlMemoryStream, $xmlSettings)
$xml.WriteContentTo($xmlWriter)
$formatedAndEncodedXMLString = [System.Text.Encoding]::UTF8.GetString($xmlMemoryStream.ToArray())
$XmlWriter.Flush()
Write-Output $formatedAndEncodedXMLString
}
ストリームを配列にダンプする前にフラッシュする必要がありますか? – Pawel
それは働いた!まだ学習しているにもかかわらず、なぜストリームについてもっと読まなければならないのかは分かりません。これを回答として提出すれば、それを正しいものとしてマークします。 – TacoMaster6000
データが内部のバッファに入っていました。これは、ファイル/ソケットなどに書き込むときに最適化することです。一度にバイト単位で大きなブロックを書く方が効果的です。フラッシング(およびクロージング)は、内部バッファからのデータが実際のターゲットに書き込まれるようにします。 (ここでは、XmlWriterとMemoryStreamを使用し、ライターがストリームをフラッシュするので、ここでもう一つレベルがあることに注意してください) – Pawel