<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Request>
<Head>
<TxCode>2818</TxCode>
</Head>
<Body>
<PaymentNo>U0000022019061750506390001</PaymentNo>
<Status>20</Status>
<Amount>400</Amount>
</Body>
</Request>
如上,有一段xml数据。要从前端传给后台。接收方式有两种,一种是Http形式,另一种是xml以字符串的形式传进后台。但不管怎么传,最重要的还是传进后台以后怎么去处理xml,怎么得到这里面我们想要的元素信息。这里就涉及到dom4j的使用。json有fastjson来解析,xml自然也有可以解析它的东西。
今天就写一下以Http接收的示例,如果是以String接收那就更简单了,大同小异,我就不写了。
先上代码解析:
public String payment(HttpServletRequest request) throws DocumentException, IOException {
// 获取HTTP请求的输入流
// 已HTTP请求输入流建立一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(
request.getInputStream(), "UTF-8"));
String buffer = null;
// 存放请求内容
StringBuffer xml = new StringBuffer();
while ((buffer = br.readLine()) != null) {
// 在页面中显示读取到的请求参数
xml.append(buffer);
}
String callbackMessage = xml.toString();
if (!ObjectUtils.isEmpty(callbackMessage)) {
Payment payment= new Payment();
Document doc = null;
//1.读取并解析XML文档,SAXReader就是一个管道,用一个流的方式,把xml文件读出来
// SAXReader reader = new SAXReader();
// Document document = reader.read(new File("User.hbm.xml")); //User.hbm.xml表示你要解析的xml文档
//2.将字符串转为XML
doc = DocumentHelper.parseText(callbackMessage);
Element rootElt = doc.getRootElement(); // 获取根节点Request
System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
Iterator iter = rootElt.elementIterator("Head"); // 获取根节点下的子节点head
// 遍历head节点
while (iter.hasNext()) {
Element recordEless = (Element) iter.next();
String txCode = recordEless.elementTextTrim("TxCode");
payment.setTxCode(txCode);
System.out.println("txCode:" + txCode);
}
Iterator iterss = rootElt.elementIterator("Body"); ///获取根节点下的子节点body
// 遍历body节点
while (iterss.hasNext()) {
Element recordEless = (Element) iterss.next();
String paymentNo = recordEless.elementTextTrim("PaymentNo");
payment.setPaymentNo(paymentNo);
System.out.println("paymentNo:" + paymentNo);
String status = recordEless.elementTextTrim("status");
payment.setStatus(status);
System.out.println("status:" + status);
String amount = recordEless.elementTextTrim("Amount");
payment.setAmount(amount);
System.out.println("amount:" + amount);
}
......到此xml解析完毕,后续操作省略
}
用到的包
代码拷进去编辑器应该会有提醒的。