6

我正在使用以下代码来初始化 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>

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

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

4

6 回答 6

3

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

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);

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

于 2010-07-13T09:32:47.137 回答
1

这是一个旧帖子,但只是为了防止未来的不良做法;您永远不应该在 XML 文档中声明xmlns命名空间,因此这可能是您得到空节点的原因,因为您正在执行 XmlDocument 不应该执行的操作。

前缀 xmlns 仅用于声明命名空间绑定,并且根据定义绑定到命名空间名称http://www.w3.org/2000/xmlns/。不得声明。其他前缀不得绑定到此名称空间名称,并且不得将其声明为默认名称空间。元素名称不能有前缀 xmlns。

来源:http ://www.w3.org/TR/REC-xml-names/#ns-decl

于 2012-04-25T09:03:58.980 回答
0

oWriter.WriteStartElement("Placemark");应该可以工作,因为父节点已经有正确的命名空间。

于 2010-07-13T09:03:50.193 回答
0

你试过了吗:

oWriter.WriteStartElement("kml", "Placemark", "kml");
于 2010-07-13T09:15:53.553 回答
0

你需要

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

否则 Placemark 元素将被放入 null 命名空间,这就是xmlns=""在序列化 XML 时添加属性的原因。

于 2010-07-13T12:48:00.743 回答
0

以下代码对我有用(来源):

XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
s.Serialize(xmlWriter, objectToSerialize, ns);
于 2019-10-04T06:22:49.237 回答