Problema al crear un objeto XElement con GML espacio de nombres
-
27-09-2019 - |
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");
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.