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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
" <四大名著>"+
"<西游记 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 文件为:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:odsInterfaceResponse xmlns:ns1="http://webservice.ods.ffcs.cn"><ns1: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></ns1:out></ns1:odsInterfaceResponse></soap:Body></soap:Envelope>
用dom4j解析xml,soap报文
最新推荐文章于 2025-04-11 15:34:19 发布