You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用System.Xml创建带=符号的XML及KML StyleMap节点问题

问题核心原因
  • 你看到的<StyleMap id="msn_placemark_circle"> =结构里的=是无效冗余字符,不属于合法XML/KML语法的一部分:这是你复制/查看KML文件时,文本显示错位带出来的多余符号,标准Google Earth KML规范里的StyleMap节点根本不存在这个符号。
  • XML语法规则里,起始标签闭合的>之后出现的内容会被识别为节点的文本内容,一旦你强行在这里插入=,解析器会判定StyleMap节点已经进入文本内容阶段,后续的<Pair>会被识别为和StyleMap平级的独立节点,自然不会被判定为子节点。
  • 强行保留这个=生成的XML文件是完全不符合规范的无效文件,Google Earth无法正常加载,没有实际使用价值。
基于System.Xml的正确实现代码
using System.Xml;

// 配置XML输出格式,匹配KML的缩进规范
XmlWriterSettings kmlWriteSettings = new XmlWriterSettings()
{
    Indent = true,
    IndentChars = "    ",
    NewLineHandling = NewLineHandling.Replace
};

using (XmlWriter writer = XmlWriter.Create("target.kml", kmlWriteSettings))
{
    // 写入StyleMap根节点及id属性
    writer.WriteStartElement("StyleMap");
    writer.WriteAttributeString("id", "msn_placemark_circle");

    // 写入第一个normal状态Pair子节点
    writer.WriteStartElement("Pair");
    writer.WriteElementString("key", "normal");
    writer.WriteElementString("styleUrl", "#sn_placemark_circle");
    writer.WriteEndElement();

    // 写入第二个highlight状态Pair子节点
    writer.WriteStartElement("Pair");
    writer.WriteElementString("key", "highlight");
    writer.WriteElementString("styleUrl", "#sh_placemark_circle_highlight");
    writer.WriteEndElement();

    // 闭合StyleMap节点
    writer.WriteEndElement();
}

上述代码生成的是完全符合KML标准的合法结构,可以直接被Google Earth正常识别加载,StyleMap和Pair的父子层级关系完全正确。

内容的提问来源于stack exchange,提问作者Doug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:21:34