我需要将节点的xml文件子集映射到Java Bean。
例如地图
<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文件,而不会丢失未映射的元素。 我怎么用来做呢? 什么图书馆?
感谢您的帮助, 莫里吉奥
答案 0 :(得分:1)
注意:我EclipseLink JAXB (MOXy)领导JAXB 2 (JSR-222)专家组成员。
以下是如何使用MOXy实现JAXB Binder
:
<强>公司Databean 强>
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>
了解更多信息
答案 1 :(得分:-1)
如果您决定结构xml中的内容,那么您可以使用XStream(http://x-stream.github.io/)来序列化和反序列化。 但是如果你只是从xml反序列化为bean(来自外来格式),那么你应该使用Smooks(http://www.smooks.org/)。
与JAXB相比,这两个库都非常轻。 JAXB不灵活,需要创建XML Schema。我不建议,因为你比创建一个简单的DOM解析浪费更多的时间。
JAXB非常学术化。示例:WSDL文档未完全描述许多“SOAP信封”,但在WSDL字段中添加了一些xml(在简单的文本字段中)。在这种情况下,您将浪费大量时间来创建JAXB基础架构......
当然这只是我个人的意见。但请记住这两个工具并尝试使用它们。你会发现它确实值得。