gpt4 book ai didi

java - 命名空间 : javax. xml.bind.UnmarshalException:意外元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:02:07 27 4
gpt4 key购买 nike

出于某种原因,我必须手动解析如下所示的 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 文件的 header 中删除 namespace ,然后解析工作没有任何问题。

我的问题是如何在不删除命名空间的情况下解决这个问题。

请注意,描述标签也有一个命名空间。

最佳答案

由于您的 XML 文档利用默认命名空间,您应该使用包级别 @XmlSchema 注释来映射命名空间限定。 @XmlSchema 注释被添加到一个名为 package-info 的特殊类中,该类与域模型位于同一包中,并包含以下内容。使用指定的 @XmlSchema,您将不需要指定任何其他命名空间信息。

package-info.java

@XmlSchema(
namespace = "http://www.opengis.net/kml/2.2",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

了解更多信息

您可以在我的博客上阅读有关 JAXB 和命名空间的更多信息:

关于java - 命名空间 : javax. xml.bind.UnmarshalException:意外元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com