XmlDocument.WriteContentTo(xmlwriter) 没有写入我的流
XmlDocument.WriteContentTo(xmlwriter) not writing to my stream
我写了一个小函数来格式化 XmlDocument 的缩进并保留 UTF-8 编码。问题是我似乎无法 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
}
您需要在将流转储到阵列之前刷新编写器。
数据位于内部缓冲区中。这是为了在写入 files/sockets 等时进行优化。写入更大的数据块比一次写入一个字节更有效。刷新(以及关闭)确保将内部缓冲区中的数据写入实际目标。 (请注意,这里还有一层,因为您使用了 XmlWriter 和 MemoryStream 并且刷新编写器会刷新流)
我写了一个小函数来格式化 XmlDocument 的缩进并保留 UTF-8 编码。问题是我似乎无法 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
}
您需要在将流转储到阵列之前刷新编写器。
数据位于内部缓冲区中。这是为了在写入 files/sockets 等时进行优化。写入更大的数据块比一次写入一个字节更有效。刷新(以及关闭)确保将内部缓冲区中的数据写入实际目标。 (请注意,这里还有一层,因为您使用了 XmlWriter 和 MemoryStream 并且刷新编写器会刷新流)