C# 如何使用XmlDocument创建XML文档?

C# 如何使用XmlDocument创建XML文档?,c#,xml,C#,Xml,如何创建这样的XML文档 <body> <level1> <level2>text</level2> <level2>other text</level2> </level1> </body> 文本 其他文本 在C#中使用XmlDocument,那么: #region Using Statements using System; using System.Xml; #en

如何创建这样的XML文档

<body>
  <level1>
    <level2>text</level2>
    <level2>other text</level2>
  </level1>
</body>

文本
其他文本
在C#

中使用
XmlDocument
,那么:

#region Using Statements
using System;
using System.Xml;
#endregion 

class Program {
    static void Main( string[ ] args ) {
        XmlDocument doc = new XmlDocument( );

        //(1) the xml declaration is recommended, but not mandatory
        XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration( "1.0", "UTF-8", null );
        XmlElement root = doc.DocumentElement;
        doc.InsertBefore( xmlDeclaration, root );

        //(2) string.Empty makes cleaner code
        XmlElement element1 = doc.CreateElement( string.Empty, "body", string.Empty );
        doc.AppendChild( element1 );

        XmlElement element2 = doc.CreateElement( string.Empty, "level1", string.Empty );
        element1.AppendChild( element2 );

        XmlElement element3 = doc.CreateElement( string.Empty, "level2", string.Empty );
        XmlText text1 = doc.CreateTextNode( "text" );
        element3.AppendChild( text1 );
        element2.AppendChild( element3 );

        XmlElement element4 = doc.CreateElement( string.Empty, "level2", string.Empty );
        XmlText text2 = doc.CreateTextNode( "other text" );
        element4.AppendChild( text2 );
        element2.AppendChild( element4 );

        doc.Save( "D:\\document.xml" );
    }
}
(1)
(二)


结果是:

<?xml version="1.0" encoding="UTF-8"?>
<body>
  <level1>
    <level2>text</level2>
    <level2>other text</level2>
  </level1>
</body>

使用字典->上面的level2来自我的字典(以防万一任何人都会发现它有用) 尝试第一个示例时,我遇到了以下错误: “此文档已具有“DocumentElement”节点。” 我被这个答案鼓舞了

并编辑了我的代码:(xmlDoc.DocumentElement.AppendChild(body))

//字典:
字典级2数据
{
{“level2”,“text”},
{“第2级”,“其他文本”},
{“相同级别2”,“更多文本”}
}
//xml贴花:
XmlDocument xmlDoc=新的XmlDocument();
XmlDeclaration=xmlDoc.CreateXmlDeclaration(“1.0”,“UTF-8”,null);
xmlementroot=xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmldocation,root);
//添加正文
xmlementbody=xmlDoc.CreateElement(string.Empty,“body”,string.Empty);
xmlDoc.AppendChild(body);
xmlementbody=xmlDoc.CreateElement(string.Empty,“body”,string.Empty);
xmlDoc.DocumentElement.AppendChild(body)//无文档元素->错误
foreach(Level2Data中的KeyValuePair条目)
{
//写入xml:-它适用于版本1。
XmlNode keyNode=xmlDoc.CreateElement(entry.Key);//打开选项卡
keyNode.InnerText=entry.Value;
body.AppendChild(keyNode);//关闭选项卡
//写入xmml版本2:(取消注释接下来的4行,并注释上面的3-版本1
//xmlementkey=xmlDoc.CreateElement(string.Empty,entry.key,string.Empty);
//XmlText value=xmlDoc.CreateTextNode(entry.value);
//key.AppendChild(值);
//body.AppendChild(键);
}
两个版本(foreach循环中的1和2)都提供了输出:

<?xml version="1.0" encoding="UTF-8"?>
<body>
    <level1>
        <level2>text</level2>
        <level2>ther text</level2>
         <same_level2>more text</same_level2>
    </level1>
</body>

文本
其他文本
更多文本

(注:第三行“相同级别2”in dictionary也可以是level2,其他的也可以,但我想说明字典的优势——在我的例子中,我需要使用不同名称的level2。

使用XDocument。第一个例子帮助我为XSLT样式表编写了一个扩展函数,它将一组节点返回给处理器。谢谢!如果您替换了使用
var
XmlElement
,第一个元素将更容易使用
//a dictionary:
Dictionary<string, string> Level2Data 
{
    {"level2", "text"},
    {"level2", "other text"},
    {"same_level2", "more text"}
}
//xml Decalration:
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmlDeclaration, root);
// add body
XmlElement body = xmlDoc.CreateElement(string.Empty, "body", string.Empty);
xmlDoc.AppendChild(body);
XmlElement body = xmlDoc.CreateElement(string.Empty, "body", string.Empty);
xmlDoc.DocumentElement.AppendChild(body); //without DocumentElement ->ERR



foreach (KeyValuePair<string, string> entry in Level2Data)
{
    //write to xml: - it works version 1.
    XmlNode keyNode = xmlDoc.CreateElement(entry.Key); //open TAB
    keyNode.InnerText = entry.Value;
    body.AppendChild(keyNode); //close TAB

    //Write to xmml verdion 2: (uncomment the next 4 lines and comment the above 3 - version 1
    //XmlElement key = xmlDoc.CreateElement(string.Empty, entry.Key, string.Empty);
    //XmlText value = xmlDoc.CreateTextNode(entry.Value);
    //key.AppendChild(value);
    //body.AppendChild(key);
}
<?xml version="1.0" encoding="UTF-8"?>
<body>
    <level1>
        <level2>text</level2>
        <level2>ther text</level2>
         <same_level2>more text</same_level2>
    </level1>
</body>