gpt4 book ai didi

java - 让 MOXy @XmlPath 使用命名空间

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:59 31 4
gpt4 key购买 nike

我正在编写一个脚本来使用 JAXB 和 MOXy 解析 KML 文件,但我很难让 @XmlPath 使用提供的命名空间。

如果我的 KML 如下所示:-

<kml>
<Document>
<name>Test</name>
</Document>
</kml>

...我的 bean 看起来像这样:-

@XmlRootElement(name = "kml")
public class Kml {
@XmlPath("Document/name/text()")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

...然后,kml.getName() 返回 Test,其工作原理如下。

但是,如果我的 KML 包含这样的命名空间:-

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Test</name>
</Document>
</kml>

...我的 bean 看起来像这样:-

@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2")
public class Kml {
@XmlPath("Document/name/text()")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

...然后,kml.getName() 返回null

我确实在正确的包级别有 jaxb.properties 并且我正在使用以下 MOXy 的依赖项:-

<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.3.2</version>
</dependency>

我到底错过了什么?谢谢。

最佳答案

下面是一个示例,演示如何配置命名空间信息。

包信息

您可以使用@XmlSchema注释来指定命名空间信息和限定。在下面的示例中,我们将指定命名空间,并且默认情况下所有元素都应该是命名空间限定的。

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

import javax.xml.bind.annotation.*;

公里

我们不需要在 Kml 类中指定任何命名空间信息。该信息来自package-info中的设置:

package forum9931520;

import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name = "kml")
public class Kml {
@XmlPath("Document/name/text()")
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

演示

package forum9931520;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Kml.class);

File xml = new File("src/forum9931520/input.xml");
Unmarshaller unmarshaller = jc.createUnmarshaller();
Kml kml = (Kml) unmarshaller.unmarshal(xml);

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(kml, System.out);
}

}

输入.xml/输出

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Test</name>
</Document>
</kml>

了解更多信息

关于java - 让 MOXy @XmlPath 使用命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931520/

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