How do I add multiple namespaces to the root element with XmlDocument?
我需要创建一个包含多个名称空间的根元素的
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); |
电流输出:
1 2 3 4 5 6 7 8 9 10 | <JOBS xmlns="http://www.example.com"> <JOB> <JOB:DOCINPUTS xmlns:JOB="http://www.example.com"> <JOB:DOCINPUT /> </JOB:DOCINPUTS> <JOB:DOCOUTPUTS xmlns:JOB="http://www.example.com"> <JOB:DOCOUTPUT /> </JOB:DOCOUTPUTS> </JOB> </JOBS> |
号
然而,我期望的输出是:
1 2 3 4 5 6 7 8 9 10 | <JOBS xmlns:JOBS="http://www.example.com" xmlns:JOB="http://www.example.com"> <JOB> <JOB:DOCINPUTS> <JOB:DOCINPUT /> </JOB:DOCINPUTS> <JOB:DOCOUTPUTS> <JOB:DOCOUTPUT /> </JOB:DOCOUTPUTS> </JOB> </JOBS> |
我的问题是:如何创建一个包含具有多个名称空间的根元素的
下面将生成您上面请求的所需输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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会发现它不需要向元素添加名称空间声明。
运行此示例查看其工作原理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); } |
号
尝试将命名空间属性添加到根元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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); |