package com.krt.common.util;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class XMLUtil {
/**
* 通过xml字符获取document文档
* @param xmlstr 要序列化的xml字符
* @return 返回文档对象
* @throws DocumentException
*/
public static Document getXMLByString(String xmlstr) throws DocumentException{
if(xmlstr==""||xmlstr==null){
return null;
}
Document document = DocumentHelper.parseText(xmlstr);
return document;
}
/**
* xml转HashMap
* @param xml
* @return
* @throws DocumentException
*/
public static List<Map> xmlToMap(String xml) throws DocumentException {
Document document = getXMLByString(xml);
List resultList = new ArrayList();
if (document != null){
Element node = document.getRootElement();
List<Element> list = node.elements();
if ("nodes".equals(node.getQName().getName())){
parseNodes(list,resultList);
}else if ("node".equals(node.getQName().getName())){
parseNode(list,resultList);
}
}
return resultList;
}
/**
* 解析node
* @param list
* @param resultList
*/
private static void parseNode(List<Element> list,List resultList){
Map result = new HashMap();
parseKey(list,result);
resultList.add(result);
}
/**
* 解析nodes
* @param list
* @param resultList
*/
private static void parseNodes(List<Element> list,List resultList){
if (list.size() != 0){{
for (int i = 0; i < list.size(); i++) {
List<Element> elements = list.get(i).elements();
Map result = new HashMap();
if (elements.size() != 0){
parseKey(elements,result);
}
resultList.add(result);
}
}}
}
/**
* 解析key
* @param list
* @param result
*/
private static void parseKey(List<Element> list,Map result){
if (list.size() != 0){
for (int j = 0; j < list.size(); j++) {
String label = list.get(j).attributeValue("label");
String value = delHTMLTag(list.get(j).getText());
result.put(label,value);
}
}
}
public static String delHTMLTag(String htmlStr){
//定义script的正则表达式
String regEx_script="<script[^>]*?>[\\s\\S]*?<\\/script>";
//定义style的正则表达式
String regEx_style="<style[^>]*?>[\\s\\S]*?<\\/style>";
//定义HTML标签的正则表达式
String regEx_html="<[^>]+>";
Pattern p_script=Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
Matcher m_script=p_script.matcher(htmlStr);
//过滤script标签
htmlStr=m_script.replaceAll("");
Pattern p_style=Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
Matcher m_style=p_style.matcher(htmlStr);
//过滤style标签
htmlStr=m_style.replaceAll("");
Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
Matcher m_html=p_html.matcher(htmlStr);
//过滤html标签
htmlStr=m_html.replaceAll("");
//返回文本字符串
return htmlStr.trim();
}
public static void main(String[] args) throws DocumentException {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><node><key type=\"java.lang.String\" label=\"ID\">D0F8AE69AB704C68A94C0B9D602B0051</key><key type=\"java.lang.String\" label=\"CODE\">360721-000201022000-CF-242</key><key type=\"java.math.BigDecimal\" label=\"VERSION\">1</key><key type=\"java.lang.String\" label=\"AUTH_LEVEL\">4</key><key type=\"java.lang.String\" label=\"NAME\">建设单位未在建设工程竣工验收后六个月内向城乡规划主管部门报送有关竣工验收资料的处罚</key><key type=\"java.lang.String\" label=\"TYPE\">CF</key><key type=\"\" label=\"SUB_TYPE\"></key><key type=\"java.math.BigDecimal\" label=\"LAW_TIME\">0</key><key type=\"\" label=\"LAW_TIME_TIP\"></key><key type=\"java.math.BigDecimal\" label=\"AGREE_TIME\">0</key><key type=\"\" label=\"AGREE_TIME_TIP\"></key><key type=\"\" label=\"PROCEDURE_TIME\"></key><key type=\"\" label=\"IS_CHARGE\"></key><key type=\"\" label=\"IS_PROCEDURE\"></key><key type=\"java.lang.String\" label=\"HAS_CHILD\">0</key><key type=\"\" label=\"BUSINESS_TYPE\"></key><key type=\"java.lang.String\" label=\"REGION_CODE\">360721000000</key><key type=\"java.lang.String\" label=\"REGION_NAME\">赣县</key><key type=\"java.lang.String\" label=\"ORG_CODE\">360721000201022000</key><key type=\"java.lang.String\" label=\"ORG_NAME\">赣县区城乡规划建设局</key><key type=\"java.lang.String\" label=\"AGENT_NAME\">赣县区城乡规划建设局</key><key type=\"java.lang.String\" label=\"AGENT_CODE\">360721000201022000</key><key type=\"\" label=\"OBJECT_CODE\"></key><key type=\"\" label=\"OBJECT_NAME\"></key><key type=\"java.lang.String\" label=\"SORT_ORDER\">00001</key><key type=\"java.lang.String\" label=\"CREATOR\">30ACF3F9D62E459C95A0E5F65BA7F856</key><key type=\"java.sql.Timestamp\" label=\"CREATE_TIME\">2018-08-14 16:32:25.0</key><key type=\"\" label=\"LAST_EDITOR\"></key><key type=\"java.sql.Timestamp\" label=\"LAST_TIME\">2018-08-14 00:00:00.0</key><key type=\"\" label=\"REMARK\"></key><key type=\"java.lang.String\" label=\"STATUS\">5</key><key type=\"java.lang.String\" label=\"SCOPE\">[2018-08-14 17:25:59/赣县区城乡规划建设局-赣县规划建设局管理员]<font color='green'>审核通过,予以发布!</font><br/></key><key type=\"\" label=\"CO_SPONSOR\"></key><key type=\"\" label=\"OLDITEMID\"></key><key type=\"java.lang.String\" label=\"FOLDER_TREE_CODE\">000000</key><key type=\"java.math.BigDecimal\" label=\"FOLDER_TREE_LEVEL\">0</key><key type=\"java.lang.String\" label=\"IS_TREE_LEAF\">1</key><key type=\"\" label=\"ORDINANCE_ID\"></key><key type=\"\" label=\"INNER_CODE\"></key><key type=\"\" label=\"IS_OUTERNET\"></key><key type=\"\" label=\"HAS_SUBITEM\"></key><key type=\"\" label=\"ORG_PROPERTY\"></key><key type=\"\" label=\"BASIC_CODE\"></key><key type=\"\" label=\"AUTHORITY_DIVISION\"></key><key type=\"java.lang.String\" label=\"SERVICE_OBJECT\">0,1</key><key type=\"java.lang.String\" label=\"TITLE_NAME\">规划建设;国土和规划建设</key></node>";
List list = xmlToMap(xml);
System.out.println();
}
}
xml解析工具类
最新推荐文章于 2024-07-18 14:43:20 发布