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);
}
}
}
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);
}
}
}