Я использую следующий код для инициализации XmlDocument
XmlDocument moDocument = new XmlDocument();
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null));
moDocument.AppendChild(moDocument.CreateElement("kml", "http://www.opengis.net/kml/2.2"));
Позже в процессе я пишу некоторые значения в него с помощью следующего кода
using (XmlWriter oWriter = oDocument.DocumentElement.CreateNavigator().AppendChild())
{
oWriter.WriteStartElement("Placemark");
//....
oWriter.WriteEndElement();
oWriter.Flush();
}
Это заканчивает тем, что дало мне следующий xml, когда я сохраняю документ
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark xmlns="">
<!-- -->
</Placemark>
</kml>
Как я могу избавиться от пустого xmlns на элементе Placemark?
- ОТРЕДАКТИРОВАННЫЙ ДЛЯ ПОКАЗА ИЗМЕНЕНИЯ В ТОМ, КАК PLACEMARK ПИСАЛСЯ-
Если я поместил пространство имен в запись placemark затем не элементов, добавляются к документу.
Я исправил проблему, создав документ со следующим кодом (без пространства имен в элементе документа)
XmlDocument moDocument = new XmlDocument();
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null));
moDocument.AppendChild(moDocument.CreateElement("kml"));
И сохранив его с помощью следующего кода, чтобы установить пространство имен перед сохранением
moDocument.DocumentElement.SetAttribute("xmlns", msNamespace);
moDocument.Save(msFilePath);
Это действительно так, поскольку namespce требуется только в сохраненном XML-файле.
Вам нужно
oWriter.WriteStartElement("Placemark", "http://www.opengis.net/kml/2.2");
иначе элемент Placemark будет помещен в пространство имен null, поэтому при сериализации XML добавляется атрибут xmlns=""
.
oWriter.WriteStartElement ("Placemark");
должен работать, потому что родительский узел уже имеет нужное пространство имен.
Вы пробовали:
oWriter.WriteStartElement("kml", "Placemark", "kml");