【问题标题】:How can I remove the BOM from XmlTextWriter using C#?如何使用 C# 从 XmlTextWriter 中删除 BOM?
【发布时间】:2009-11-18 13:27:48
【问题描述】:

如何从正在创建的 XML 文件中删除 BOM?

我尝试过使用新的 UTF8Encoding(false) 方法,但它不起作用。这是我的代码:

XmlDocument xmlDoc = new XmlDocument();
XmlTextWriter xmlWriter = new XmlTextWriter(filename, new UTF8Encoding(false));
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
xmlWriter.WriteStartElement("items");
xmlWriter.Close();
xmlDoc.Load(filename);
XmlNode root = xmlDoc.DocumentElement;
XmlElement item = xmlDoc.CreateElement("item");
root.AppendChild(item);
XmlElement itemCategory = xmlDoc.CreateElement("category");
XmlText itemCategoryText = xmlDoc.CreateTextNode("test");
item.AppendChild(itemCategory);
itemCategory.AppendChild(itemCategoryText);
xmlDoc.Save(filename);

【问题讨论】:

  • 仅供参考,您不应使用new XmlTextReader()new XmlTextWriter()。自 .NET 2.0 以来,它们已被弃用。请改用XmlReader.Create()XmlWriter.Create()

标签: c# xml byte-order-mark xmlwriter


【解决方案1】:

您将文件保存两次 - 一次使用XmlTextWriter,一次使用xmlDoc.Save。从XmlTextWriter 保存不是添加 BOM - 用xmlDoc.Save 保存是。

只需保存到TextWriter,这样您就可以再次指定编码:

using (TextWriter writer = new StreamWriter(filename, false,
                                            new UTF8Encoding(false))
{
    xmlDoc.Save(writer);
}

【讨论】:

  • 您好 Jon,感谢您的快速回复,您是说要删除开头的 XmlTextWriter 部分,只在方法结束时使用 TextWriter 吗?
  • 嗯,不清楚您的代码是做什么的。为什么你当前保存文件然后重新加载它?
  • 我只是想创建一个包含一系列不同节点的 XML 文件。老实说,我很着急,从另一个网站上拉了这个部分,并在适当的地方进行了更改。
  • @Chris:好的,在这种情况下是的,您可以将 XmlTextWriter 部分移到底部 - 或者按照我在答案中显示的方式使用 XmlDocument.Save
  • 嗨,乔恩,感谢您的帮助,我终于成功了。
【解决方案2】:

我会将 XML 写入字符串(构建器),然后将该字符串写入文件。

【讨论】:

  • 这种方法比必要的要慢,如果您的 XML 数据集足够大,会占用额外的内存,因为您添加了不必要的中间步骤。最好使用 Xml 直接写入文件[ Text]Writer 如其他答案所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2011-12-13
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多