Pregunta

Estoy creando XML utilizando LINQ to XML y C #. Todo funciona muy bien excepto cuando tengo que añadir manualmente en una fila en el XML. Esta fila se añade sólo si tengo un valor para pasar a través de él, de lo contrario simplemente ignorar la etiqueta completa.

Yo uso XElement.Load para cargar en la cadena de texto que almaceno en una cadena, pero cuando me ato al XML que siempre pone en xmlns = "" al final de mi etiqueta.

¿Hay una manera que puedo decir XElement.Load utilizar el espacio de nombres existente o hacer caso omiso de que al poner en la cadena para el XML?

Lo ideal es que sólo quiero que mi cadena que se incluye para el XML que se está creando sin que se añaden etiquetas adicionales.

A continuación se muestra un ejemplo de lo que actualmente hago:

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";

Cuando construyo el XML me carga la cadena anterior en mi XML. Es aquí donde xmlns = "se agrega" al valor XMLDetails pero lo ideal es que quieren que este hizo caso omiso, ya que está causando problemas con el destinatario cuando intentan leer esta etiqueta.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",

... Mi código XML ...

XElement.Load(new StringReader(XMLDetails))

... Fin del código XML ...

Como se mencionó anteriormente. Mi código funciona, emite con éxito XML para mí. Es sólo la etiqueta MyNewTag me carga en el uso de XElement.Load consigue xmlns = "" añadido al final de la misma, que me está causando un problema.

¿Alguna idea de cómo puedo solucionar esto? Gracias por su ayuda.

Saludos, Rica

¿Fue útil?

Solución

¿Qué hay de:

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());

Como una alternativa mejor - ¿por qué no incluir ya sea el espacio de nombres cuando se está construyendo el XML, o mejor aún, crear un XElement en lugar de generar manualmente una cadena XML que luego de leer. Manualmente la creación de XML es muy rara vez es una buena idea. Aparte de cualquier otra cosa, usted está asumiendo que ValuePassedThrough ya se ha escapado, o no necesita escapar etc. que pueden sea válida -. Pero es al menos un motivo de preocupación

Otros consejos

Al igual que este

XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            XMLDetails));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top