XmlWriter编写空的xmlns

ste*_*ell 5 .net c# xml xmlwriter

我正在使用以下代码初始化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"));
Run Code Online (Sandbox Code Playgroud)

在此过程的后面,我使用以下代码向其中写入一些值

using (XmlWriter oWriter = oDocument.DocumentElement.CreateNavigator().AppendChild())
{
  oWriter.WriteStartElement("Placemark");
  //....
  oWriter.WriteEndElement();
  oWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)

保存文档后,最终得到以下xml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark xmlns="">
    <!-- -->   
  </Placemark>
</kml>
Run Code Online (Sandbox Code Playgroud)

如何摆脱Placemark元素上的空xmlns?

-编辑以显示更改位置标记的方式-
如果我将名称空间放在位置标记的写入中,则不会将任何元素添加到文档中。

ste*_*ell 4

我通过使用以下代码创建文档解决了该问题(文档元素中没有命名空间)

XmlDocument moDocument = new XmlDocument(); 
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null)); 
moDocument.AppendChild(moDocument.CreateElement("kml"));
Run Code Online (Sandbox Code Playgroud)

并通过使用以下代码保存它来在保存之前设置命名空间

moDocument.DocumentElement.SetAttribute("xmlns", msNamespace);
moDocument.Save(msFilePath);
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为仅在保存的 xml 文件中需要命名空间。

  • @Jason - 除非你能提供一种“好”的方法来做到这一点,否则这不是“坏”的做法;这是实现这一目标的唯一方法! (2认同)