dom4j 解析xml,生成xml超详细(webservice请求)

解析String类型XML数据
Document doc = DocumentHelper.parseText(String text);
​​​​​​​
Document对象转String
String text = doc.asXML()

一、使用dom4j创建xml文档

package cn.mars.app.txn.whpf;

import java.io.FileOutputStream;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Dom4jTest {

    public static void main(String[] args) {
        // 创建文档。
        Document document = DocumentHelper.createDocument();
        // 设置文档DocType,这里为了举例,添加hibernate的DocType
        document.addDocType("hibernate-configuration", "-//Hibernate/Hibernate Configuration DTD 3.0//EN",
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd");
        // 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错
        Element root = document.addElement("skills");
        // 添加注释
        root.addComment("第一个技能");
        // 根节点下添加节点
        Element first = root.addElement("skill");
        // 节点添加属性
        first.addAttribute("name", "独孤九剑");
        // 节点下添加节点
        Element info = first.addElement("info");
        // 节点设置内容数据
        info.setText("为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。");

        // 同理增加其他节点,内容,属性等
        Element second = root.addElement("skill");
        second.addAttribute("name", "葵花宝典");
        Element info2 = second.addElement("info");
        info2.setText("宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。");

        // 创建节点
        Element third = DocumentHelper.createElement("skill");
        // 将节点加入到根节点中
        root.add(third);
        // 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者
        Attribute name = DocumentHelper.createAttribute(third, "name", "北冥神功");
        // 将属性加入到节点上
        third.add(name);
        // 创建子节点并加入到节点中
        Element info3 = DocumentHelper.createElement("info");
        info3.setText("逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。");
        third.add(info3);

        try {
            // 创建格式化类
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 设置编码格式,默认UTF-8
            format.setEncoding("UTF-8");
            // 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用
            FileOutputStream fos = new FileOutputStream("d:/skills.xml");
            // 创建xml输出流
            XMLWriter writer = new XMLWriter(fos, format);
            // 生成xml文件
            writer.write(document);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<skills>
  <!--第一个技能-->
  <skill name="独孤九剑">
    <info>为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。</info>
  </skill>
  <skill name="葵花宝典">
    <info>宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。</info>
  </skill>
  <skill name="北冥神功">
    <info>逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。</info>
  </skill>
</skills>

二、使用dom4j解析xml文件

请求报文:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope     
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'  
xmlns:q0='http://WebXml.com.cn/'     xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
 xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' ><soapenv:Body>
<q0:getWeatherbyCityName><q0:theCityName>唐山</q0:theCityName> 
</q0:getWeatherbyCityName></soapenv:Body></soapenv:Envelope>

根据请求报文解析xml文件:

package hanwl.TestDemo;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.xml.sax.InputSource;

public class TestWebservice2 {

    public static void main(String[] args) throws IOException {
        
        // TODO Auto-generated method stub
        String wsdl = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";//请求地址
        int timeout = 5000;//时间暂时设置成5秒,一般请求一个接口5秒应该是可以请求成功的
        StringBuffer sb = new StringBuffer("");          
            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
              sb.append("<soapenv:Envelope "                       
                      + "    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
                      + " xmlns:q0='http://WebXml.com.cn/' "
                      + "    xmlns:xsd='http://www.w3.org/2001/XMLSchema' " 
                      + " xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' >");
              sb.append("<soapenv:Body>");
            sb.append("<q0:getWeatherbyCityName>");
            sb.append("<q0:theCityName>唐山</q0:theCityName> ");
            sb.append("</q0:getWeatherbyCityName>");
            sb.append("</soapenv:Body>");
            sb.append("</soapenv:Envelope>");
         
            // HttpClient发送SOAP请求
             System.out.println("HttpClient 发送SOAP请求");
             HttpClient client = new HttpClient();
             PostMethod postMethod = new PostMethod(wsdl);
             // 设置连接超时
             client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
             // 设置读取时间超时
             client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
             // 然后把Soap请求数据添加到PostMethod中
             RequestEntity requestEntity = new StringRequestEntity(sb.toString(), "text/xml", "UTF-8");
             //设置请求头部,否则可能会报 “no SOAPAction header” 的错误
             //postMethod.setRequestHeader("SOAPAction","");
             // 设置请求体
             postMethod.setRequestEntity(requestEntity);
             int status = client.executeMethod(postMethod);
             // 打印请求状态码
             System.out.println("status:" + status);
             // 获取响应体输入流
             InputStream is = postMethod.getResponseBodyAsStream();
             // 获取请求结果字符串
             String result = IOUtils.toString(is);
             Document dc = strXmlToDocument(result);
//             Element root = dc.getRootElement();
//             System.out.println(root.getName());
//             System.out.println("result: " + result);
        
    }
    
    public static Document strXmlToDocument(String parseStrXml){        
         Document document = null;
        try {
            document = DocumentHelper.parseText(parseStrXml);            
            Element root = document.getRootElement();
            List<Element> list = root.elements();
            getElement(list);
        } catch (DocumentException e) {
            e.printStackTrace();
        }          
        return document;
    }
    
    private static void getElement(List<Element> sonElemetList) {
//        Map<String,String> map = new HashMap<String, String>();
        for (Element sonElement : sonElemetList) {
                if (sonElement.elements().size() != 0) {
                    System.out.println(sonElement.getName() + ":");
                    getElement(sonElement.elements());
                }else{
                    System.out.println(sonElement.getName() + ":"+ sonElement.getText());
                }
 
        }
    }    
}

控制台输出:

status:200
Body:
getWeatherbyCityNameResponse:
getWeatherbyCityNameResult:
string:河北
string:唐山
string:54534
string:54534.jpg
string:2020/7/3 16:00:49
string:20/25℃
string:73日 雷阵雨转多云
string:西风转南风小于3级
string:4.gif
string:1.gif
string:今日天气实况:气温:27℃;风向/风力:北风 1级;湿度:58%;紫外线强度:最弱。
string:中国人民保险中暑指数:无中暑风险,天气不热,在炎炎夏日中十分难得,可以告别暑气漫漫啦~
健臻·血糖指数:不易波动,天气条件不易引起血糖波动。
穿衣指数:舒适,建议穿长袖衬衫单裤等服装。
洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。

string:21/29℃
string:74日 多云转雷阵雨
string:南风转西南风小于3级
string:1.gif
string:4.gif
string:21/28℃
string:75日 雷阵雨
string:南风转东南风小于3级
string:4.gif
string:4.gif
string:唐山地处环渤海中心地带,南滨渤海,北依燕山,交通便利,可进出性很强。背山临海的地理格局、复杂多样的地貌类型和特有的地方历史文化,造就了许多极具特色的旅游资源。自然景观品位独特,人文景观文化积淀深厚。唐山北部山区有明长城221公里,东接山海关、老龙头,西接慕田峪、八达岭,有名关险隘29处,敌楼603座,烽火台82个。水下长城、大理石长城、72券楼、监狱楼、水门、长城砖窑、养马圈、屯兵营等皆为长城沿线独秀,代表了明长城历史文化的精华。长城沿线已有清东陵、景忠山、鹫峰山、汤泉、潘家口、大黑汀、青山关、灵山、白羊峪等一系列旅游景区。清东陵始建于康熙二年,是目前我国现存规模庞大、体系完整的帝王陵墓群之一,200011月列为世界文化遗产。陵区埋葬着5个皇帝、15个皇后、137个妃子、4个公主。清东陵的建筑恢宏、壮观、精美,庞大的建筑群中有中国现存最大的石牌坊,最长的神路。位于迁西县境内的景忠山,以其博大精深、源远流长的佛、道、儒三教合一的人文和自然景观闻名于世,曾被清康熙皇帝御题“灵山秀色”、“天下名山”。唐山拥有山、海、林、岛等多种独具特色的自然景观,境内有国家级文物保护单位2处,省级重点文物保护单位40处。唐山有196.5公里海岸线,海滨风光秀丽,尤其是菩提岛、月坨岛、打网岗三个近海岛屿,正在开发建设以自然生态观光和休闲度假为主要内容的新型旅游区,成为华北地区特色旅游靓点。
Disconnected from the target VM, address: '127.0.0.1:64428', transport: 'socket'

本文转自:https://www.cnblogs.com/liuchaogege/p/5869044.html
本文转自:https://www.cnblogs.com/loong-hon/p/10337316.html

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值