XmlWriter пишущий пустой xmlns

Я использую следующий код для инициализации 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 затем не элементов, добавляются к документу.

5
задан stevehipwell 13 July 2010 в 09:05
поделиться

4 ответа

Я исправил проблему, создав документ со следующим кодом (без пространства имен в элементе документа)

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-файле.

2
ответ дан 15 December 2019 в 06:13
поделиться

Вам нужно

oWriter.WriteStartElement("Placemark", "http://www.opengis.net/kml/2.2");

иначе элемент Placemark будет помещен в пространство имен null, поэтому при сериализации XML добавляется атрибут xmlns="".

0
ответ дан 15 December 2019 в 06:13
поделиться

oWriter.WriteStartElement ("Placemark"); должен работать, потому что родительский узел уже имеет нужное пространство имен.

0
ответ дан 15 December 2019 в 06:13
поделиться

Вы пробовали:

oWriter.WriteStartElement("kml", "Placemark", "kml");
0
ответ дан 15 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: