javaxml多层解析_多级xml解析⽅案package lToSql;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
* 读取⼀个xml⽂件返回string
* @author lmb
*
*/
public class T {
/**
* 加载xml⽂件
* @return Document
*/
public static Document load(){
Document document=null;
String url="E://QQ//l";
try {
SAXBuilder reader = new SAXBuilder();
document=reader.build(new File(url));
} catch (Exception e) {
e.printStackTrace();
}
return document;
}
/**
* 将xml⽂件转换为String串
* @return
*/
public static String XmlToString(){
Document document=null;
document=load();
Format format =PrettyFormat(); format.setEncoding("UTF-8");//设置编码格式StringWriter out=null; //输出对象
String sReturn =""; //输出字符串
XMLOutputter outputter =new XMLOutputter(); out=new StringWriter();
try {
outputter.output(document,out);
} catch (IOException e) {
e.printStackTrace();
}
String();
return sReturn;
}
}
package lToSql;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
/**
* 解析xml的⼯具类
* 1、将多层级xml解析为Map
使用dom4j解析xml文件* 2、将多层级xml解析为Json
*
* @author lmb
*
*/
public class T1 {
public static Logger logger = Logger(T1.class); public static void main(String[] args) {
// 获取⼀个xml⽂件
String textFromFile = T.XmlToString();
//将xml解析为Map
// Map resultMap = xml2map(textFromFile);
//将xml解析为Json
String resultJson = xml2Json(textFromFile);
}
/**
* 将xml格式响应报⽂解析为Json格式
* @param responseXmlTemp
* @return
*/
public static String xml2Json(String responseXmlTemp) { Document doc = null;
try {
doc = DocumentHelper.parseText(responseXmlTemp);
} catch (DocumentException e) {
<("parse text error : " + e);
}
Element rootElement = RootElement();
Map mapXml = new HashMap();
element2Map(mapXml,rootElement);
String jsonXml = JSONObject.fromObject(mapXml).toString(); System.out.println("Json >>> " + jsonXml);
return jsonXml;
}
/**
* 将xml格式响应报⽂解析为Map格式
* @param responseXmlTemp
* @param thirdXmlServiceBean
* @return
* @throws DocumentException
*/
public static Map xml2map(String responseXmlTemp) { Document doc = null;
try {
doc = DocumentHelper.parseText(responseXmlTemp);
} catch (DocumentException e) {
<("parse text error : " + e);
}
Element rootElement = RootElement();
Map mapXml = new HashMap();
element2Map(mapXml,rootElement);
System.out.println("Map >>> " + mapXml);
return mapXml;
}
/**
* 使⽤递归调⽤将多层级xml转为map
* @param map
* @param rootElement
*/
public static void element2Map(Map map, Element rootElement) { //获得当前节点的⼦节点
List elements = rootElement.elements();
if (elements.size() == 0) {
//没有⼦节点说明当前节点是叶⼦节点,直接取值
map.Name(),Text());
}else if (elements.size() == 1) {
//只有⼀个⼦节点说明不⽤考虑list的情况,继续递归
Map tempMap = new HashMap();
element2Map((0));
map.Name(),tempMap);
}else {
//多个⼦节点的话就要考虑list的情况了,特别是当多个⼦节点有名称相同的字段时Map tempMap = new HashMap();
for (Element element : elements) {
tempMap.Name(),null);
}
Set keySet = tempMap.keySet();
for (String string : keySet) {
Namespace namespace = (0).getNamespace();
List sameElements = rootElement.elements(new QName(string,namespace)); //如果同名的数⽬⼤于1则表⽰要构建list
if (sameElements.size() > 1) {
List list = new ArrayList();
for(Element element : sameElements){
Map sameTempMap = new HashMap();
element2Map(sameTempMap,element);
list.add(sameTempMap);
}
map.put(string,list);
}else {
//同名的数量不⼤于1直接递归
Map sameTempMap = new HashMap();
element2Map((0));
map.put(string,sameTempMap);
}
}
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论