如何使用XmlDocument向根元素添加多个名称空间?

我需要创建一个XmlDocument ,其根元素包含多个名称空间。 我使用的是C#2.0或3.0

这是我的代码:

 XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("JOBS", "http://www.example.com"); doc.AppendChild(root); XmlElement job = doc.CreateElement("JOB", "http://www.example.com"); root.AppendChild(job); XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com"); job.AppendChild(docInputs); XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com"); docInputs.AppendChild(docInput); XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com"); docOutputs.AppendChild(docOutput); 

目前的输出:

           

但是,我想要的输出是:

           

我的问题:如何创建包含具有多个名称空间的根元素的XmlDocument

以下将生成您在上面请求的所需输出:

 XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("JOBS"); root.SetAttribute("xmlns:JOBS", "http://www.example.com"); root.SetAttribute("xmlns:JOB", "http://www.example.com"); doc.AppendChild(root); XmlElement job = doc.CreateElement("JOB"); XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com"); XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com"); docInputs.AppendChild(docInput); job.AppendChild(docInputs); XmlElement docOutputs = doc.CreateElement("JOB", "DOCOUTPUTS", "http://www.example.com"); XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com"); docOutputs.AppendChild(docOutput); job.AppendChild(docOutputs); doc.DocumentElement.AppendChild(job); 

但是,在您的示例/所需输出中,对于两个不同的前缀使用相同的XML命名空间似乎很奇怪。 希望这可以帮助。

您可以在元素上显式创建名称空间前缀属性。 然后,当您添加使用相同名称空间和相同前缀创建的后代元素时,XmlDocument将确定它不需要向元素添加名称空间声明。

运行此示例以查看其工作原理:

  using System; using System.Xml; static void Main(string[] args) { XmlDocument d = new XmlDocument(); XmlElement e = d.CreateElement("elm"); d.AppendChild(e); d.DocumentElement.SetAttribute("xmlns:a", "my_namespace"); e = d.CreateElement("a", "bar", "my_namespace"); d.DocumentElement.AppendChild(e); e = d.CreateElement("a", "baz", "other_namespace"); d.DocumentElement.AppendChild(e); e = d.CreateElement("b", "bar", "my_namespace"); d.DocumentElement.AppendChild(e); d.Save(Console.Out); Console.ReadLine(); } 

尝试将namespace属性添加到根元素:

  XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("JOBS", "http://www.example.com"); root.SetAttribute("xmlns:JOB", "http://www.example.com"); doc.AppendChild(root); XmlElement job = doc.CreateElement("JOB", "http://www.example.com"); root.AppendChild(job); XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com"); job.AppendChild(docInputs); XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com"); docInputs.AppendChild(docInput); XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com"); root.AppendChild(docOutput);