如何获得XML与头部((How to get XML with header (<?xml v

2019-07-19 18:48发布

考虑下面这个简单的代码创建一个XML文档并显示。

XmlDocument xml = new XmlDocument();
XmlElement root = xml.CreateElement("root");
xml.AppendChild(root);
XmlComment comment = xml.CreateComment("Comment");
root.AppendChild(comment);
textBox1.Text = xml.OuterXml;

它显示,符合市场预期:

<root><!--Comment--></root>

这不,但是,显示

<?xml version="1.0" encoding="UTF-8"?>   

所以,我怎么能拿到呢?

Answer 1:

创建使用XML声明XmlDocument.CreateXmlDeclaration方法 :

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(docNode);

注:请看一看该方法的文档, 特别是encoding参数:有这个参数的值的特殊要求。



Answer 2:

你需要使用的XmlWriter(默认情况下写入XML声明)。 你应该注意到的是C#字符串是UTF-16和你的XML声明说,该文件是UTF-8编码。 这种差异可能会导致问题。 下面是一个例子,写,让你期望的结果的文件:

XmlDocument xml = new XmlDocument();
XmlElement root = xml.CreateElement("root");
xml.AppendChild(root);
XmlComment comment = xml.CreateComment("Comment");
root.AppendChild(comment);

XmlWriterSettings settings = new XmlWriterSettings
{
  Encoding           = Encoding.UTF8,
  ConformanceLevel   = ConformanceLevel.Document,
  OmitXmlDeclaration = false,
  CloseOutput        = true,
  Indent             = true,
  IndentChars        = "  ",
  NewLineHandling    = NewLineHandling.Replace
};

using ( StreamWriter sw = File.CreateText("output.xml") )
using ( XmlWriter writer = XmlWriter.Create(sw,settings))
{
  xml.WriteContentTo(writer);
  writer.Close() ;
}

string document = File.ReadAllText( "output.xml") ;


Answer 3:

XmlDeclaration xmldecl;
xmldecl = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", null);

XmlElement root = xmlDocument.DocumentElement;
xmlDocument.InsertBefore(xmldecl, root);


文章来源: How to get XML with header (