我需要将节点的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文件,而不会丢失未映射的元素。我如何使用才能做到这一点呢?什么库?
谢谢你的帮助,莫里齐奥
发布于 2012-04-03 18:12:31
注:我是的负责人,也是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>有关详细信息的,请访问
发布于 2012-04-03 16:30:59
如果决定结构xml中的内容,那么可以使用XStream (http://x-stream.github.io/)来序列化和反序列化。但是,如果只将xml反序列化为bean (从外部格式),那么应该使用Smooks (http://www.smooks.org/)。
与JAXB相比,这两个库都非常轻量级。JAXB不灵活,需要创建XML Schema。我不建议这样做,因为与创建一个简单的DOM解析器相比,您会损失更多的时间。
JAXB是非常学术的。示例:许多"SOAP信封“并不是由WSDL文档完全描述的,而是在WSDL字段中添加了一些xml (在一个简单的文本字段中)。在这种情况下,您会浪费很多时间来创建JAXB基础设施……
当然,这只是我个人的观点。但请记住这两个工具,并尝试使用它们。你会发现这是非常值得的。
https://stackoverflow.com/questions/9988170
复制相似问题