xml字符串解析 java_JAVA构建XML字符串并解析

本文详细介绍了如何在JAVA中构建XML字符串,包括创建XML文档、设置元素和属性,以及解析返回的XML字符串。通过示例代码展示了如何使用dom4j库进行XML操作,并提供了测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:本文主要讲述调用接口的过程中需要传送xml字符串,此时,创建xml及解析返回的xml极为重要。

XML.java

package com.jalor.xml;

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.Node;

/**

* JAVA构建XML字符串并解析

* @author Administrator

*

*/

public class XML {

/**

* 请求构建XML

* @return

*/

public String createXmlString (){

String xml = "";

try {

// 构建XML

String requestXml = buildRequestXml();

System.out.println(requestXml);

//把字符串转换为输入流

ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(requestXml.getBytes("UTF-8"));

System.out.println(arrayInputStream);

//获取XML(流里取得)

StringBuffer buf = new StringBuffer();

InputStream stream = arrayInputStream;

BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));

String line;

while (null != (line = br.readLine())) {

buf.append(line);

}

xml = buf.toString();

}

catch (Exception e) {

e.printStackTrace();

}

return xml;

}

/**

* 构建XML

* @param

* @return

*/

public static String buildRequestXml() {

String requestXml = "";

try {

//创建请求报文

Document document = DocumentHelper.createDocument();

document.setXMLEncoding("UTF-8");

Element message = document.addElement("Message");

//创建请求报文头

Element header = message.addElement("header");

header.addElement("action").addText("validateUser");

header.addElement("userName").addText("xxxxxx");

header.addElement("password").addText("xxxxxx");

header.addElement("service").addText("siteadmin");

header.addElement("siteName").addText("box");

header.addElement("type").addText("XML");

header.addElement("version").addText("30");

//请求报文体

Element body = message.addElement("body");

Element parameter = body.addElement("parameter");

parameter.addElement("type").addText("1");

parameter.addElement("value").addText("xxxxx");

body.addElement("password").addText("xxxxx");

requestXml = document.asXML();

} catch (Exception e) {

String msg = "构建请求XML失败";

System.out.println(msg);

}

return requestXml;

}

/**

* 调用接口

* @param xml

* @return

*/

public String analysis(String xml){

String rt = "";

try {

// 创建url资源

URL url = new URL("http://xxxxxxxxx");

// 建立http连接

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 设置允许输出

conn.setDoOutput(true);

conn.setDoInput(true);

// 设置不用缓存

conn.setUseCaches(false);

// 设置传递方式

conn.setRequestMethod("POST");

// 设置维持长连接

conn.setRequestProperty("Connection", "Keep-Alive");

// 设置文件字符集:

conn.setRequestProperty("Charset", "UTF-8");

//转换为字节数组

byte[] data = xml.getBytes();

// 设置文件长度

conn.setRequestProperty("Content-Length", String.valueOf(data.length));

// 设置文件类型:

conn.setRequestProperty("contentType", "text/xml");

// 开始连接请求

conn.connect();

OutputStream out = conn.getOutputStream();

// 写入请求的字符串

out.write(data);

out.flush();

out.close();

System.out.println(conn.getResponseCode());

// 请求返回的状态

if (conn.getResponseCode() == 200) {

System.out.println("连接成功");

// 请求返回的数据

InputStream in = conn.getInputStream();

String message = null;

try {

byte[] data1 = new byte[in.available()];

in.read(data1);

// 转成字符串

message = new String(data1);

//从返回的xml文件中获取想要的URL

rt = getByXML(message);

} catch (Exception e1) {

e1.printStackTrace();

}

} else {

System.out.println("no++");

}

} catch (Exception e) {

e.printStackTrace();

}

return rt;

}

/**

* 从xml中获取url

* @param xmlStr

* @return

*/

public static String getByXML(String xmlStr){

String rt = "";

try {

Document document=DocumentHelper.parseText(xmlStr);

// 获取节点对象,注意引号内的“//”必须加 ,否则报错

Node result=document.selectSingleNode("//result");

// 根据返回值判断接口是否请求成功

if (result.getText().equals("SUCCESS")) {

Node hostUrl=document.selectSingleNode("//hostUrl");

rt = hostUrl.getText();

}

}

catch (DocumentException e) {

e.printStackTrace();

}

return rt;

}

}

测试案例 toXml.java

package com.jalor.xml;

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

/**

* 构建请求XML

* @author Administrator

*

*/

public class toXml {

public static void main(String[] args) throws IOException {

//构建请求XML

String requestXml = buildRequestXml();

System.out.println(requestXml);

//把字符串转换为输入流

ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(requestXml.getBytes("UTF-8"));

System.out.println(arrayInputStream);

//获取XML(流里取得)

StringBuffer buf = new StringBuffer();

InputStream stream = arrayInputStream;

BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));

String line;

while (null != (line = br.readLine())) {

buf.append(line);

}

String xml = buf.toString();

System.out.println(xml);

System.out.println("----------------");

}

/**

* 构建请求XML

* @param

* @return

*/

public static String buildRequestXml() {

String requestXml = "";

try {

//创建请求报文

Document document = DocumentHelper.createDocument();

document.setXMLEncoding("UTF-8");

Element message = document.addElement("Message");

//创建请求报文头

Element header = message.addElement("header");

header.addElement("action").addText("validateUser");

header.addElement("userName").addText("admin");

header.addElement("password").addText("hbmt-688");

header.addElement("service").addText("siteadmin");

header.addElement("siteName").addText("box");

header.addElement("type").addText("XML");

header.addElement("version").addText("30");

//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//header.addElement("flowintime").addText(sdf.format(new Date()));

//请求报文体

Element body = message.addElement("body");

Element parameter = body.addElement("parameter");

parameter.addElement("type").addText("1");

parameter.addElement("value").addText("44165@103810972");

body.addElement("password").addText("123456");

requestXml = document.asXML();

} catch (Exception e) {

String msg = "构建请求XML失败";

System.out.println(msg);

}

return requestXml;

}

}

提取码:i4vt

注意:本文归作者所有,未经作者允许,不得转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值