C# как сделать чтобы в XML файле созданном с помощью LINQ to XML не выводилось xmlns=“”
Помогите пожалуйста, никак не могу понять как сделать так, чтобы в создаваемом файле никогда не выводилась пустая xmlns=""
есть код, создаём XML файл:
public void CreateKMLFile()
{
XNamespace aw = "http://www.opengis.net/kml/2.2";
XDocument xdoc = new XDocument();
XElement kml = new XElement(aw + "kml");
XElement document = new XElement("Document");
XElement name = new XElement("name", "Моя карта");
document.Add(name);
kml.Add(document);
xdoc.Add(kml);
xdoc.Save("Object_In_map.kml");
MessageBox.Show("Записал");
}
Создаётся файл:
А надо без вечно вылезающей xmlns="":
Ответы (1 шт):
Объявление пространства имён распространяются на все вложенные элементы.
Вы создали узел kml с неймспейсом: aw + "kml. В xml получили <kml xmlns="http://www.opengis.net/kml/2.2">.
Но узел Document вы создаёте без пространства имён. Значит, он не относится к этому неймспейсу, значит, он относится к пустому пространству имён. Поэтому к нему автоматически добавляется xmlns="".
Если в файле xml будет написано:
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
то это будет означать, что оба узла без префикса: kml и Document относятся к одному и тому же пространству имён.
Если вам нужно именно это, то решение будет следующим:
XElement kml = new XElement(aw + "kml");
XElement document = new XElement(aw + "Document");
XElement name = new XElement(aw + "name", "Моя карта");
Ко всем элементам добавляем неймспейс aw.
Есть более краткая форма записи создания xml:
var xdoc = new XDocument(
new XElement(aw + "kml",
new XElement(aw + "Document",
new XElement(aw + "name", "Моя карта")
)));
Именно её рекомендуется использовать.
Рекомендую Namespace Tutorial (нажимайте там ссылку Next) на zvon.org. Там хорошо, в цветах, показано, какие узлы к каким пространствам имён относятся.
Ещё бы форматирование там подправить...
Ага, есть там вариант с нормальным форматированием.
