使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串

Posted

技术标签:

【中文标题】使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串【英文标题】:Use StringWriter, StringBuilder and XmlTextWriter to load an XML and write it into a string 【发布时间】:2018-07-26 20:47:09 【问题描述】:

我在给定位置有一个 XML 文件,我希望将 XML 的内容保存在一个字符串变量中。但是,当我打印出来时,编码会发生变化。我就是这样做的。

    XmlDocument xmlFile = new XmlDocument();
    xmlFile.Load(xmlFileLocation);

    using (StringWriter stringWriter = new StringWriter(new StringBuilder()))
    
         using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter)  Formatting = Formatting.Indented )
         
             xmlFile.Save(xmlTextWriter);
         

         return stringWriter.ToString();
    

当我尝试使用给定的编码初始化 XmlTextWriter (new XmlTextWriter(stringWriter, Encoding.UTF8)) 时,我遇到了 StringWriter 的问题,但我不知道如何解决。有什么想法吗?

问题是:无法从 StringWriter 转换为 Stream

【问题讨论】:

xmlFile.OuterXml 有什么问题(见***.com/questions/2407302/…)? 只用File.ReadAllText? '编码更改'的意思并不完全清楚,但我猜它是this question的副本。 【参考方案1】:

使用StringWriter 的编码始终为UTF-16 且无法更改。当您想使用具有不同编码的StringWriter 时,可以将StringWriter 子类化。具体操作方法请参考this回答。

使用您的代码,这将更改为

using (EncodingStringWriter eStringWriter = new EncodingStringWriter (new StringBuilder(), Encoding.UTF8))

     using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter)  Formatting = Formatting.Indented )
     
         xmlFile.Save(xmlTextWriter);
     

     return eStringWriter.ToString();

【讨论】:

以上是关于使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串的主要内容,如果未能解决你的问题,请参考以下文章

StringWriter类的使用

使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串

不关闭 stringwriter 会导致泄漏吗?

不关闭 stringwriter 会导致泄漏吗?

[二十]JavaIO之StringReader 与 StringWriter

StringReader类的使用