代码之家  ›  专栏  ›  技术社区  ›  stevehipwell

XmlWriter写入空xmlns

  •  4
  • stevehipwell  · 技术社区  · 14 年前

    我使用以下代码初始化一个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 version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
      <Placemark xmlns="">
        <!-- -->   
      </Placemark>
    </kml>
    

    如何删除Placemark元素上的空xmln?

    --编辑以显示对PLACEMARK编写方式的更改--
    如果我将名称空间放在placemark的write中,那么没有元素被添加到文档中。

    6 回复  |  直到 14 年前
        1
  •  3
  •   stevehipwell    14 年前

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

    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
  •  1
  •   user152949 user152949    12 年前

    这是一个老职位,但只是为了防止今后的不良做法;你应该 从未 宣布 xmlns公司

    前缀xmlns仅用于声明命名空间绑定,由 http://www.w3.org/2000/xmlns/ 不得申报。其他前缀不能绑定到此 元素名称不能有前缀xmlns。

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

        3
  •  0
  •   Hinek    14 年前

    oWriter.WriteStartElement("Placemark");

        4
  •  0
  •   stevehipwell    14 年前

    你试过:

    oWriter.WriteStartElement("kml", "Placemark", "kml");
    
        5
  •  0
  •   Alohci    14 年前

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

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

        6
  •  0
  •   Artur    5 年前

    下面的代码对我有用( source

    XmlSerializer s = new XmlSerializer(objectToSerialize.GetType());
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("","");
    s.Serialize(xmlWriter, objectToSerialize, ns);