java名称空间:javax。xml。绑定解组异常:意外元素
出于某些原因,我必须手动解析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;
}
}
我的问题是无法识别xmlnamespace
属性
如果我更改注释
@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2")
到
@XmlRootElement(name = "kml")
并从我的KML文件的头中删除名称空间,那么解析工作就不会有任何问题
我的问题是如何在不删除名称空间的情况下处理这个问题
请注意,description标记还有一个名称空间
# 1 楼答案
由于XML文档利用了默认名称空间,因此应该使用包级别的
@XmlSchema
注释来映射名称空间限定。@XmlSchema
注释被添加到名为package-info
的特殊类中,该类与域模型位于同一个包中,并包含以下内容。指定了@XmlSchema
之后,就不需要指定任何其他名称空间信息包信息。java
了解更多信息
您可以在我的博客上阅读更多关于JAXB和名称空间的信息: