xsltcontext nombres necesario namespace espacios administrador c# .net xml namespaces xmldocument

nombres - add namespace to xml c#



¿Cómo agrego múltiples espacios de nombres al elemento raíz con XmlDocument? (3)

Necesito crear un XmlDocument con un elemento raíz que contenga varios espacios de nombres. Estoy usando C # 2.0 o 3.0

Aquí está mi código:

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);

El resultado actual:

<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>

Sin embargo, mi resultado deseado es:

<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>

Mi pregunta: ¿cómo creo un XmlDocument que contenga un elemento raíz con múltiples espacios de nombres?


Lo siguiente generará el resultado deseado que solicitó anteriormente:

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);

Sin embargo, parece extraño que en su ejemplo / resultado deseado se use el mismo espacio de nombres XML en comparación con dos prefijos diferentes. Espero que esto ayude.


Puede crear explícitamente atributos de prefijo de espacio de nombres en un elemento. Luego, cuando agrega elementos descendientes que se crean con el mismo espacio de nombres y el mismo prefijo, XmlDocument resolverá que no necesita agregar una declaración de espacio de nombres al elemento.

Ejecute este ejemplo para ver cómo funciona esto:

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(); }


intente agregar el atributo de espacio de nombres al elemento raíz:

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);