Проблема создания объекта XElement с пространством имен GML - PullRequest
1 голос
/ 01 октября 2010

Я пытаюсь создать документ XML , используя пространство имен GML и XML to LINQ .

Моя цель - XElement с таким содержанием:

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

Но я получаю следующее:

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

Проблема в том, что gml: отсутствует в элементе. Это почему?


Мой код выглядит следующим образом:

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

1 Ответ

3 голосов
/ 01 октября 2010

Прежде всего это XML

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

эквивалентно этому XML

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

И все потребители XML должны рассматривать это как одно и то же. Тем не менее, вы можете получить второй результат, как это:

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

Если вы не укажете атрибут объявления пространства имен, LINQ to XML автоматически выберет для вас префикс (в данном случае он использует пустой). Если вы хотите принудительно использовать определенный префикс, вам нужно предоставить атрибут объявления пространства имен.

...