Pergunta

Estou tentando construir um Xml Documento usando o GML espaço para nome e XML para Linq.

Meu objetivo é um XElement com conteúdo como este:

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

Mas eu recebo o seguinte:

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

O problema é que o gml: está faltando no elemento. Por que é que?


Meu código é o seguinte:

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

Solução

Primeiro de tudo este XML

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

é equivalente a este XML

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

E todos os consumidores XML devem tratá -lo da mesma forma. Dito isto, você pode alcançar a segunda saída como esta:

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

Se você não especificar o atributo da declaração de espaço para nome do LINQ ao XML, escolherá um prefixo automaticamente para você (neste caso, ele usa o vazio). Se você deseja forçar o uso de um prefixo específico, precisa fornecer o atributo da declaração do espaço para o nome.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top