Pregunta

Estoy tratando de construir un XML documento mediante el GML espacio de nombres y XML para LINQ .

Mi objetivo es una XElement con contenidos como este:

<gml:name>...</gml:name>

Pero me sale el siguiente:

<name xmlns="http://www.opengis.net/gml" />

El problema es que el gml: no se encuentra en el elemento. ¿Porqué es eso?


Mi código es el siguiente:

XNamespace nsGML = "http://www.opengis.net/gml";
XElement item = new XElement(nsGML + "name");
¿Fue útil?

Solución

En primer lugar este XML

<name xmlns="http://www.opengis.net/gml" />

es equivalente a este XML

<gml:name xmlns:gml="http://opengis.net/gml" />

Y todos los consumidores XML deben tratar como iguales. Dicho esto se puede lograr la segunda salida como esta:

XNamespace nsGML = "http://www.opengis.net/gml";
XElement item = new XElement(nsGML + "name",
                    new XAttribute(XNamespace.Xmlns + "gml", nsGML.NamespaceName));

Si no se especifica el atributo de declaración de espacio de LINQ to XML va a recoger un prefijo automáticamente para usted (en este caso se utiliza el vacío). Si desea el uso de la fuerza de un prefijo específico que necesita para proporcionar el atributo de declaración de espacio de nombres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top