gpt4 book ai didi

java - 更新部分 XML 映射到 bean

转载 作者:行者123 更新时间:2023-11-29 09:15:08 24 4
gpt4 key购买 nike

我需要将节点的 xml 文件子集映射到 Java Bean。

例如 map

<data>
<field1>Value</field1>
<field2>Value</field2>
<field3>Value</field3>
<field4>Value</field4>
<field5>Value</field5>
</data>

public class DataBean {
private String field2;
private String field5;
// ...getter/setter
}

然后操作 bean 并更新源 xml 文件而不丢失未映射的元素。我该如何使用它?什么图书馆?

感谢帮助,毛里齐奥

最佳答案

注意:我是 EclipseLink JAXB (MOXy)领导 JAXB 2 (JSR-222) 的成员专家组。

下面是如何使用 MOXy 的 JAXB Binder 实现来完成此操作:

数据 bean

package forum9988170;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="data")
public class DataBean {

private String field2;
private String field5;

public String getField2() {
return field2;
}

public void setField2(String field2) {
this.field2 = field2;
}

public String getField5() {
return field5;
}

public void setField5(String field5) {
this.field5 = field5;
}

}

jaxb.properties

要将 MOXy 指定为您的 JAXB 提供者,您需要在与您的域类相同的包中添加一个名为 jaxb.properties 的文件,其中包含以下条目,

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

演示

package forum9988170;

import java.io.File;
import javax.xml.bind.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class Demo {

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

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
File xml = new File("src/forum9988170/input.xml");
Document document = db.parse(xml);

Binder<Node> binder = jc.createBinder();
DataBean dataBean = (DataBean) binder.unmarshal(document);
dataBean.setField2("NEW FIELD 2");
dataBean.setField5("NEW FIELD 5");
binder.updateXML(dataBean);

TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
t.transform(source, result);
}

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data>
<field1>Value</field1>
<field2>NEW FIELD 2</field2>
<field3>Value</field3>
<field4>Value</field4>
<field5>NEW FIELD 5</field5>
</data>

了解更多信息

关于java - 更新部分 XML 映射到 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9988170/

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