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"?>
それでどうやってそれを得ることができますか?
XmlDocument.CreateXmlDeclaration Method を使用してXML宣言を作成します。
XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(docNode);
注:encoding
パラメーターについては、メソッドのドキュメント、特にをご覧ください。このパラメーターの値には特別な要件があります。
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") ;
XmlDeclaration xmldecl;
xmldecl = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = xmlDocument.DocumentElement;
xmlDocument.InsertBefore(xmldecl, root);