【问题标题】:XmlDocument.WriteContentTo(xmlwriter) not writing to my streamXmlDocument.WriteContentTo(xmlwriter) 未写入我的流
【发布时间】:2016-06-30 19:06:55
【问题描述】:

我编写了一个小函数来格式化 XmlDocument 的缩进并保留 UTF-8 编码。问题是我似乎无法将内容写入我的 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
} 

【问题讨论】:

  • 在将流转储到数组之前可能需要刷新?
  • 成功了!!不知道为什么...仍在学习,将不得不阅读有关流的更多信息。如果您将此作为答案提交,我会将其标记为正确。
  • 数据位于内部缓冲区中。这是为了在写入文件/套接字等时进行优化。写入更大的数据块比一次写入一个字节更有效。刷新(以及关闭)确保来自内部缓冲区的数据被写入实际目标。 (请注意,这里还有一个级别,因为您使用 XmlWriter 和 MemoryStream 并且刷新写入器会刷新流)

标签: xml powershell xml-parsing xmlwriter


【解决方案1】:

在将流转储到数组之前,您需要刷新写入器。

数据位于内部缓冲区中。这是为了在写入文件/套接字等时进行优化。写入更大的数据块比一次写入一个字节更有效。刷新(以及关闭)确保来自内部缓冲区的数据被写入实际目标。 (请注意,这里还有一个级别,因为您使用 XmlWriter 和 MemoryStream 并且刷新写入器会刷新流)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2010-10-31
    相关资源
    最近更新 更多