用dom4j解析xml,soap报文

package demo4j;

import java.io.BufferedReader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;


public class demo1 {

    /*
     * 字符串解析xml
     * 
     */
    public static void parseStr(){
        /*
         * 
         */
        String str = ""+  
                     " <四大名著>"+  
                        "<西游记 id=\"x001\">"+  
                           "<作者>吴承恩1"+  
                           "<作者>吴承恩2"+  
                            "<朝代>明朝"+  
                        " "+ 
                        "<红楼梦 id=\"x002\">"+  
                         "<作者>曹雪芹"+  
                         " "+ 
                       "";

        try {

            Document document  = DocumentHelper.parseText(str);
            //获取根节点元素,此处为<四大名著>
            Element node = document.getRootElement();
            //通过element()获得指定节点名称的节点,在这里是<西游记>这个节点不包括<红楼梦>
            Element xiyouji = node.element("西游记");
            //获得所在节点的节点名称
            String elementName = xiyouji.getName();
            //获取<西游记>节点所具有的属性,输入需要的属性名称id
            Attribute attribute = xiyouji.attribute("id");
            //获得属性文本 x001
            String txt = attribute.getText();
            //通过elements()获取node下的所有字节,返回时一个包含所有节点的集合对象。
            List child = xiyouji.elements();
            for(Iterator it=child.iterator();it.hasNext();){
                Element element = (Element)it.next();
                System.out.println(element.getTextTrim());

            }
            System.out.println(txt);

        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }
    /*
     * xml文件解析
     * 
     */

    public static void parseXmlFile() {

        StringBuffer sb = new StringBuffer("");
        //从文件csdn.txt中将内容读取到sb字符串中
         try {
            FileReader reader = new FileReader("demo/csdn.txt");
            BufferedReader br = new BufferedReader(reader);
            String str = "";
            while((str = br.readLine())!= null){
                sb.append(str.trim());
            }
             br.close();
             reader.close();
            // System.out.println(sb);
            //解析读取进来的soapUI报文,先不用转义不然parseText会报错,获得document对象
             Document document  = DocumentHelper.parseText(sb.toString()); 
             document.getRootElement();
             Element out = 
                     document.getRootElement().element("Body").element("odsInterfaceResponse").element("out");
             //在解析一次
             Element custResponses = DocumentHelper.parseText(out.getText()).getRootElement();
             Element cust = custResponses.element("cust");
             System.out.println(cust);
             StringBuffer sb1 = new StringBuffer("");
             for(Iterator it = cust.elementIterator();it.hasNext();){
                 Element elem = (Element)it.next();
                 if(elem.getName().equals("recomContent")){
                    String recomContent = elem.getTextTrim()+"。";
                    sb1.append(recomContent);
                 }
                 if(elem.getName().equals("recomReson")){
                    String recomReson = elem.getTextTrim();
                    sb1.append(recomReson);
                 }
             }

             System.out.println(sb1.toString());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        //parseStr();
        parseXmlFile();

    }

}

demo/dscn.txt 文件为:

"http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">"http://webservice.ods.ffcs.cn">out><;?xml version="1.0" encoding="UTF-8"?><custResponses><ROW_NUM>1</ROW_NUM><errorMsg>营销单共享成功</errorMsg><errorCode>0</errorCode><cust><custId>28909989</custId><prodId>15962435</prodId><custTel>059522280108</custTel><recomId>306484878</recomId><recomContent>家庭宽带副卡暑期精准营销活动</recomContent><recomReson>根据用户套餐使用情况及清单中的高转网意愿异网号码,开展融合增开副卡营销工作,结合免费副卡(部分地市)、副卡红包、高值套餐副卡无限流量、增装副卡宽带提速、副卡保底终端补贴等政策推荐新装副卡</recomReson><mktgPlanId>9923</mktgPlanId></cust></custResponses>

你可能感兴趣的:(webservice)