Problema Criando um objeto Xelement com namespace GML
-
27-09-2019 - |
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");
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