dom4j解析xml

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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


public class ParseXml {


/**
* "<AvtTicketTypeConfig>"
+ "<togetherID>"
+ "<ID>10000001</ID>" + "<ID>10000002</ID>" + "</togetherID>"
+ "<frequencyNum1>101</frequencyNum1>"
+ "</AvtTicketTypeConfig>"
* @param xml
* @param parentElementName 必填,就是要取哪个element下的值如frequencyNum1下的值
* @param sonElementName 可选不填时null,就是取哪个parentElementName下的sonElementName下的值 如 togetherID下的ID值
* @return 如多个值用"_"区分
*/
@SuppressWarnings("unchecked")
public static Map<String,Object> readStringXmlOutList(String xml,String parentElementName,String sonElementName) {
Map<String,Object> map = new HashMap<String, Object>();
Document doc = null;
try {
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
Iterator iter = rootElt.elementIterator();
iteratorXmlElementList(iter,map,parentElementName,sonElementName,null,null);
} catch (Exception e) {
// TODO: handle exception
}
return map;
}
@SuppressWarnings("unchecked")
private static Map<String,Object> iteratorXmlElementList
(Iterator iter,Map<String,Object> map,String parentElementName,String sonElementName,
String parentName,String sonName){


while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
String currentElementName =recordEle.getName();
if(currentElementName.equals(parentElementName)&&!currentElementName.equals(sonElementName)){
parentName =currentElementName;
Iterator nodes = recordEle.elementIterator();
if(nodes.hasNext()){
iteratorXmlElementList(nodes,map,parentElementName,sonElementName,parentName,sonName);
}else{
String key = recordEle.getName();
if(parentElementName==null){

}else
if(parentElementName.equals(key)){
map.put(parentElementName, recordEle.getData());
}
}
}else if(currentElementName.equals(sonElementName)&&!currentElementName.equals(parentElementName)){
sonName = currentElementName;
Iterator nodes = recordEle.elementIterator();
if(nodes.hasNext()){
//iteratorXmlElementList(nodes,map,parentElementName,sonElementName,parentName,sonName);
}else{
String key = recordEle.getName();
if(sonElementName==null){

}else
if(sonElementName.equals(key)){
Object obj = map.get(parentElementName.concat("_").concat(sonElementName));
if(obj==null){
map.put(parentElementName.concat("_").concat(sonElementName), recordEle.getData());
}else{
String tmp = obj.toString().concat("_").concat(recordEle.getData().toString());
map.put(parentElementName.concat("_").concat(sonElementName), tmp);
}

}
}
}else{
Iterator nodes = recordEle.elementIterator();
if(nodes.hasNext()){
if(parentName==null){
parentName=currentElementName;
}else{
parentName=parentName.concat(currentElementName);
}
iteratorXmlElementList(nodes,map,parentElementName,sonElementName,parentName,sonName);
parentName=null;
}else{
String temp=(parentName==null?"":parentName.concat("_"));
Object obj = map.get(temp.concat(currentElementName));
if(obj==null){
map.put(temp.concat(currentElementName), recordEle.getData());
}else{
String tmp = obj.toString().concat("_").concat(recordEle.getData().toString());
map.put(temp.concat(currentElementName), tmp);
}

}

}



}
return map;
}
/**
* @param args
*/
public static void main(String[] args) {
String xmlString = "<AvtTicketTypeConfig>"
// + "<isRefund>true</isRefund>" + "<frequency>4</frequency>"
+ "<frequencyNum>10</frequencyNum>" + "<togetherID>"
+ "<ID>10000001</ID>" + "<ID>10000002</ID>" + "</togetherID>"
+ "<frequencyNum1>101</frequencyNum1>"
+ "</AvtTicketTypeConfig>";

// String xmlString = "<AvtTicketTypeConfig>"
// + "<togetherID>"
// + "<ID>10000001</ID>" + "<ID>10000002</ID>" + "</togetherID>"
// + "<frequencyNum1>101</frequencyNum1>"
// + "</AvtTicketTypeConfig>";
// Map<String,Object> map = readStringXmlOutList(xmlString,"togetherID","ID");

Map<String,Object> map = readStringXmlOutList(xmlString,null,null);
Object[] objs = map.keySet().toArray();
for(Object obj:objs){
System.out.println(obj);
}


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值