Я написал небольшую функцию, которая форматирует отступ XmlDocument и сохраняет кодировку UTF-8. Проблема в том, что я не могу представить WriteContentTo мой экземпляр XmlWriter. Является ли моя реализация неправильной?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