通过c#创建xml rootNode

时间:2013-08-09 07:25:00

标签: c# xml

我想创建一个xml文档和根元素,如下所示:

<rdf:RDF xmlns:cim="http://iec.ch/TC57/2009/CIM-schema-cim14#"

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

我尝试像这样创建:

 XmlDocument doc = new XmlDocument();
        XmlNode rootNode = doc.CreateElement("rdf:RDF xmlns:cim="http://iec.ch/TC57/2009/CIM-schema-cim14#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">");
        doc.AppendChild(rootNode);

        XmlNode userNode = doc.CreateElement("user");
        XmlAttribute attribute = doc.CreateAttribute("age");
        attribute.Value = "42";
        userNode.Attributes.Append(attribute);
        userNode.InnerText = "John Doe";
        rootNode.AppendChild(userNode);

        userNode = doc.CreateElement("user");
        attribute = doc.CreateAttribute("age");
        attribute.Value = "39";
        userNode.Attributes.Append(attribute);
        userNode.InnerText = "Jane Doe";
        rootNode.AppendChild(userNode);

        doc.Save("C:/xml-test.xml");

但我有一个例外:''字符,十六进制值0x20,不能包含在名称中。等等。

如何制作这个元素? 感谢。

2 个答案:

答案 0 :(得分:2)

您用于构建XML的方法实际上是构建一个对象树(而不是它们的文本表示形式),对于Schemas,您必须告诉文档:

XmlDocument doc = new XmlDocument();
XmlSchemaSet xss = new XmlSchemaSet();
xss.Add("cim", "http://iec.ch/TC57/2009/CIM-schema-cim14#");
xss.Add("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
doc.Schemas = xss;
XmlNode rootNode = doc.CreateElement("rdf:RDF"); // This overload assumes the document already knows about the rdf schema as it is in the Schemas set
doc.AppendChild(rootNode);

答案 1 :(得分:1)

如果你可以考虑使用Linq to XML,这里有一个替代方案。

// Your data
var users = new List<User> {
    new User { Name = "John", Age = 42 },
    new User { Name = "Jane", Age = 39 }
};

// Project the data into XElements
var userElements = 
    from u in users     
    select 
        new XElement("user", u.Name, 
            new XAttribute("age", u.Age));

// Build the XML document, add namespaces and add the projected elements
var doc = new XDocument(
    new XElement("RDF",
        new XAttribute(XNamespace.Xmlns + "cim", 
            XNamespace.Get("http://iec.ch/TC57/2009/CIM-schema-cim14#")),
        new XAttribute(XNamespace.Xmlns + "rdf", 
            XNamespace.Get("http://www.w3.org/1999/02/22-rdf-syntax-ns#")),
        userElements
    )
);      

doc.Save(@"c:\xml-test.xml");