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

Java生成KMZ时Description含HTML表格无法正常显示求助

解决KMZ中Description字段HTML表格无法正常显示的问题

问题根源

你手动给description字段拼接了包含CDATA的字符串,但序列化框架(如XStream/JAXB)会将整个字符串视为普通文本,对其中的<、>等特殊字符进行转义,导致最终KML中的CDATA块被破坏,变成类似&lt;![CDATA[&lt;div&gt;...&lt;/div&gt;]]&gt;的内容,Google Earth无法识别内部的HTML结构。

解决方案

根据你使用的序列化工具,选择对应的处理方式:

1. 若使用XStream

利用XStream的@CDATA注解,让框架自动为字段内容包裹CDATA块,且不转义内部HTML:

// 修改实体类的description字段注解
@Element(name = "Description")
@CDATA
private String description;

// 设置内容时,直接传入纯HTML,无需手动添加CDATA标签
String htmlTable = "<table border='1' width='300'><tr><td>" + contenidoProcesado[1] + "</td></tr></table>";
String description = "<div>" + htmlTable + "</div>";
placemark.setDescription(description);

如果不想用注解,也可以通过代码注册CDATA转换器:

XStream xstream = new XStream();
xstream.registerConverter(new CDATAConverter());
xstream.alias("Placemark", Placemark.class);
// 其他序列化配置...

2. 若使用JAXB

使用@XmlCDATA注解标记字段,避免HTML转义:

import javax.xml.bind.annotation.XmlCDATA;
import javax.xml.bind.annotation.XmlElement;

// 实体类字段注解
@XmlElement(name = "Description")
@XmlCDATA
private String description;

// 设置内容时直接传入HTML即可
String htmlTable = "<table border='1' width='300'><tr><td>" + contenidoProcesado[1] + "</td></tr></table>";
String description = "<div>" + htmlTable + "</div>";
placemark.setDescription(description);

3. 手动生成XML(适配所有序列化场景)

如果上述注解方式不生效,可以直接用DOM/SAX手动构建XML节点,创建CDATA块并嵌入HTML:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

// 创建Placemark节点
Element placemarkElem = doc.createElement("Placemark");

// 创建Description节点并添加CDATA内容
Element descElem = doc.createElement("Description");
CDATASection cdataContent = doc.createCDATASection("<div><table border='1' width='300'><tr><td>" + contenidoProcesado[1] + "</td></tr></table></div>");
descElem.appendChild(cdataContent);

placemarkElem.appendChild(descElem);
// 后续将Document写入KML文件,再打包为KMZ

验证结果

修改后生成的KML中,Description标签内容会是:

<Description><![CDATA[<div><table border='1' width='300'><tr><td>xxx</td></tr></table></div>]]></Description>

Google Earth会正确解析CDATA内的HTML表格,正常显示描述内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:44