出於某種原因,我必須手動解析KML文件,它看起來像這樣:命名空間:javax.xml.bind.UnmarshalException:意外的元素
<?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的頭部去除空間文件,然後解析工作沒有任何問題。
我的問題是如何解決這個問題而不刪除命名空間。
請注意,description標籤也有一個名稱空間。
注意:我已經閱讀了所有關於這個或類似問題的主題,並沒有任何建議起作用。 – Luixv