【发布时间】:2014-05-08 15:46:35
【问题描述】:
出于某种原因,我必须手动解析一个如下所示的 KML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
...
<Placemark>
<Point><coordinates>13.38705,52.52715,0</coordinates></Point>
<Name>My name</Name>
<description xmlns="">Hallo World</description>
</Placemark>
</Document>
</kml>
为了将它映射到 java,我编写了以下类
@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2")
public class Kml {
// <kml xmlns="http://www.opengis.net/kml/2.2">
Document document;
@XmlElement(name = "Document")
public Document getDocument() {
return document;
}
public void setDocument(Document document) {
this.document = document;
}
}
使用 Jaxb 我得到了以下解析器。
public class JAXBKmlParser {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public Kml klmParser(final String kmlFile) {
Kml kml = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Kml.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(kmlFile);
kml = (Kml) unmarshaller.unmarshal(reader);
} catch (JAXBException e) {
logger.error("JABX Exception corrupted KML", e);
}
return kml;
}
}
我的问题是无法识别 xml namespace 属性。
如果我更改注释
@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2")
到
@XmlRootElement(name = "kml")
并从我的 KML 文件的标题中删除命名空间,然后解析工作没有任何问题。
我的问题是如何在不删除命名空间的情况下解决这个问题。
注意描述标签也有一个命名空间。
【问题讨论】:
-
注意:我已经阅读了 SO 关于这个或类似问题的所有主题,但没有任何建议奏效。
标签: java xml exception jaxb kml