import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class XmlParser {
/***
* 把对象格式为XML字符串
*
* @param obj
* @param c
* @return
* @throws Exception
*/
public static <T> String format(T obj, Class<T> c) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(c);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter out = new StringWriter();
jaxbMarshaller.marshal(obj, out);
return out.toString();
}
/****
* 把XML字符串解析成对象
*
* @return
* @throws Exception
*/
public static <T> T parse(String xml, Class<T> c) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(c);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
@SuppressWarnings("unchecked")
T result = (T) jaxbUnmarshaller.unmarshal(new StringReader(xml));
return result;
}
/*
* 测试方法
* /
public static void main(String[] args) throws Exception{
System.out.println(format(Order.mock(), Order.class));
String xml = format(Order.mock(), Order.class);
System.out.println(parse(xml, Order.class));
}
}
----------------------------------------------------------------------------------------------------------------------
对象类Order
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Order")
public class Order implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String epcode;// 运单号,部分发货方式必填
private String userid;// 客户号
private String channel;// 发货方式
private String userOrderNumber;// 客户订单号
private String sendDate;// 发货日期
private String quantity;// 货品数量
private String packageNo;// 包裹号
private String insure;// 是否需要保险
private String memo;// 备注。会出现在拣货单上
private Goods goods;
@XmlElement(name = "Epcode")
public String getEpcode() {
return epcode;
}
public void setEpcode(String epcode) {
this.epcode = epcode;
}
@XmlElement(name = "Userid")
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
@XmlElement(name="Channel")
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
@XmlElement(name="OrderNumber")
public String getUserOrderNumber() {
return userOrderNumber;
}
public void setUserOrderNumber(String userOrderNumber) {
this.userOrderNumber = userOrderNumber;
}
@XmlElement(name="SendDate")
public String getSendDate() {
return sendDate;
}
public void setSendDate(String sendDate) {
this.sendDate = sendDate;
}
@XmlElement(name="Quantity")
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
@XmlElement(name="PackageNo")
public String getPackageNo() {
return packageNo;
}
public void setPackageNo(String packageNo) {
this.packageNo = packageNo;
}
@XmlElement(name="Insure")
public String getInsure() {
return insure;
}
public void setInsure(String insure) {
this.insure = insure;
}
@XmlElement(name="Memo")
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
@XmlElement(name="Goods")
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
@Override
public String toString() {
return "Order [epcode=" + epcode + ", userid=" + userid + ", channel="
+ channel + ", userOrderNumber=" + userOrderNumber
+ ", sendDate=" + sendDate + ", quantity=" + quantity
+ ", packageNo=" + packageNo + ", insure=" + insure + ", memo="
+ memo + ", goods=" + goods + "]";
}
/***
* 填充测试数据
* @return
*/
public static Order mock() {
Order order = new Order();
order.setChannel("amazion");
order.setEpcode("156889635520");
order.setUserid("1002");
order.setPackageNo("20160808");
Goods goods = new Goods();
goods.setSku("10008987666");
goods.setGoodsName("袜子");
goods.setWeight("12KG");
goods.setDeclaredCurrency("US");
order.setGoods(goods);
return order;
}
-----------------------------------------------------------------------------------------------------------------
对象类Goods
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Goods")
public class Goods {
private String sku;
private String goodsName;
private String weight;
private String declaredCurrency;
@XmlElement(name="Sku")
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
@XmlElement(name="GoodsName")
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
@XmlElement(name="Weight")
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
@XmlElement(name="DeclaredCurrency")
public String getDeclaredCurrency() {
return declaredCurrency;
}
public void setDeclaredCurrency(String declaredCurrency) {
this.declaredCurrency = declaredCurrency;
}
}
相关推荐
本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:DOM(文档对象模型)和SAX(简单API for XML)。DOM解析器会将整个XML文件加载到内存中,形成一个树形...
Java XML解析是Java开发中的一项重要技能,尤其是在处理结构化数据时。XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于配置文件、数据交换和文档存储等领域。本压缩包“java心电图xml解析....
将xml串转换成Map类型,如果有重复节点,自动转换为list类型存储,所以最终转换并非绝对Map
本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...
通过以上分析,我们可以看到使用JDOM库在Java中解析和操作XML字符串的完整过程。这包括了如何将XML字符串转换为可读写的数据结构,以及如何遍历、读取和修改XML文档的元素和属性。这对于在Java应用程序中处理动态...
Java XML解析包主要指的是用于处理XML(eXtensible Markup Language)文档的库,它使得在Java程序中读取、写入、修改和操作XML变得简单。本篇将详细介绍使用Java进行XML解析的关键知识点,以dom4j-1.6.1为例。 1. *...
在本文中,我们将深入探讨如何使用JAXB实现Java对象与XML的互相转换。 首先,我们需要理解JAXB的基本工作原理。JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中...
Java代码PDF解析成XML是一项技术任务,涉及到Java编程语言、PDF文档处理和XML数据格式转换。在这个场景中,我们主要关注如何使用Java库iTextPDF将PDF文档中的内容解析为XML结构。 首先,我们需要理解PDF(Portable ...
在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,提供了对XML文档的解析和生成功能。 例如,在上面的代码中,maptoXml方法将Map对象转换为xml字符串。该方法首先创建了一个...
XML交互时方便进行XML格式转换,包含XML格式数据转换成list对象方法,参数拼接成XML方法
Java中的XML解析是处理XML数据的关键技术,JDom是一个高效的、纯Java的XML处理库,它为Java开发者提供了便捷的方式来创建、修改和读取XML文档。在这个资源中,我们将探讨如何利用JDom来解析XML文件,并从MySQL数据库...
1. **导入相关包**:在Java程序中使用XSLT进行转换前,需要导入必要的包,如`javax.xml.transform`、`javax.xml.transform.stream`和`javax.xml.transform.dom`等,这些包提供了执行XSLT转换所需的类和接口。...
在Java编程环境中,解析XML文件是一项常见的任务,特别是在数据处理和集成中。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据。本教程将介绍如何使用Java解析XML文件,并将解析...
DOM4J是一个基于Java的高效XML解析库,它是对DOM和SAX API的一个简单而强大的封装。DOM4J提供了更简洁的API,使得XML的解析和操作更加容易。DOM4J已成为XML解析的一种流行选择。 ### 性能对比 不同解析方式之间的...
在实际开发中,根据项目需求和性能考虑,可以选择合适的XML解析技术。例如,如果需要快速查找或修改XML数据,DOM可能是好选择;如果内存有限,SAX或StAX更为合适;如果涉及大量Java对象和XML之间的转换,JAXB则是...
2. java实现Xml与json相互转换的必要性:在Web开发中,我们经常需要在前后端之间进行数据的交换,由于后端和前端使用的数据格式可能不同,这时候就需要实现数据格式的转换,尤其是在使用Java作为后端开发语言时,...
总结,调用Java中的Web服务并解析XML涉及到了Web服务的基础概念、Java的Web服务客户端创建、XML解析技术以及实际的调用与响应处理。熟练掌握这些知识点,能够帮助开发者有效地集成和利用各种Web服务资源。
Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...
在Java编程环境中,XML(可扩展标记语言)和XSLT(可扩展样式表语言转换)是处理和转换XML文档的常见工具。XSLT是一种专门用于将XML文档转换为其他XML、HTML或文本格式的语言。本文将详细介绍如何在Java中使用XSLT来...