/**
* Created by Administrator on 2017/6/2.
* xml解析的工具类
* 把xml的所有节点和对应的值,转化为map
*/
public class XMLParserUtil {
public XMLParserUtil() {
}
public static Map<String, Object> paraserXML(InputStream inputStream) {
HashMap map = new HashMap();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException var12) {
var12.printStackTrace();
}
Document document = null;
try {
document = builder.parse(inputStream);
} catch (SAXException var10) {
var10.printStackTrace();
} catch (IOException var11) {
var11.printStackTrace();
}
Element root = document.getDocumentElement();
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
doParaser(node, map, (String) null);
}
try {
inputStream.close();
} catch (Exception var9) {
;
}
return map;
}
public static Map<String, Object> paraserXML(InputStream inputStream, String listNodeName) {
HashMap map = new HashMap();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException var12) {
var12.printStackTrace();
}
Document document = null;
try {
document = builder.parse(inputStream);
} catch (SAXException var10) {
var10.printStackTrace();
} catch (IOException var11) {
var11.printStackTrace();
}
Element root = document.getDocumentElement();
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
doParaser(node, map, listNodeName);
}
return map;
}
private static void doParaser(Node node, Map<String, Object> map, String listNodeName) {
if (node.getNodeType() == 1) {
Element element = (Element) node;
if (isElementChildOf(element, listNodeName)) {
if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == 3) {
putLeafIntoMapWithSpecified(element, map, 0, listNodeName);
} else if (element.getChildNodes().getLength() == 0) {
putLeafIntoMapWithSpecified(element, map, 0, listNodeName);
} else if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == 4) {
putLeafIntoMapWithSpecified(element, map, 0, listNodeName);
}
doParaser(element, map, listNodeName);
} else if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == 3) {
putLeafIntoMapWithNoSpecified(element, map, 0);
} else if (element.getChildNodes().getLength() == 0) {
putLeafIntoMapWithNoSpecified(element, map, 1);
} else if (element.getChildNodes().getLength() == 1 && element.getChildNodes().item(0).getNodeType() == 4) {
putLeafIntoMapWithNoSpecified(element, map, 2);
} else {
doTravelWithNoSpecified(element, map);
}
}
}
private static boolean isElementChildOf(Element element, String nodeName) {
if (nodeName == null) {
return false;
} else {
for (Node node = element.getParentNode(); node != null; node = node.getParentNode()) {
if (node.getNodeName().equals(nodeName)) {
return true;
}
}
return false;
}
}
private static void putLeafIntoMapWithNoSpecified(Element element, Map<String, Object> rootMap, int type) {
String key = element.getParentNode().getNodeName();
String value = null;
switch (type) {
case 0:
case 2:
value = element.getChildNodes().item(0).getNodeValue();
break;
case 1:
value = "null";
}
if (rootMap.get(key) != null) {
if (rootMap.get(key) instanceof List) {
List elementMap = (List) rootMap.get(key);
if (((Map) elementMap.get(elementMap.size() - 1)).containsKey(element.getNodeName())) {
elementMap.add(buildMap(new String[]{element.getNodeName()}, new String[]{value}));
} else {
((Map) elementMap.get(elementMap.size() - 1)).put(element.getNodeName(), value);
}
}
if (rootMap.get(key) instanceof Map) {
Map elementMap1 = (Map) rootMap.get(key);
if (elementMap1.containsKey(element.getNodeName())) {
rootMap.remove(key);
ArrayList elementList = new ArrayList();
elementList.add(elementMap1);
elementList.add(buildMap(new String[]{element.getNodeName()}, new String[]{value}));
rootMap.put(key, elementList);
} else {
elementMap1.put(element.getNodeName(), value);
}
}
} else {
rootMap.put(key, buildMap(new String[]{element.getNodeName()}, new String[]{value}));
}
}
private static void putLeafIntoMapWithSpecified(Element element, Map<String, Object> rootMap, int type, String listNodeName) {
String value = null;
switch (type) {
case 0:
case 2:
value = element.getChildNodes().item(0).getNodeValue();
break;
case 1:
value = "null";
}
String[] parentNames = getParentNames(element, listNodeName);
Map tempMap = rootMap;
for (int map = parentNames.length - 1; map >= 0; --map) {
if (tempMap.get(parentNames[map]) == null) {
tempMap.put(parentNames[map], new HashMap());
}
tempMap = (Map) tempMap.get(parentNames[map]);
}
if (tempMap.containsKey(element.getNodeName())) {
HashMap var10 = new HashMap();
for (int listObject = parentNames.length - 2; listObject >= 0; --listObject) {
if (listObject == 0) {
var10.put(parentNames[listObject], value);
} else {
var10.put(parentNames[listObject], new HashMap());
}
}
Object var11 = rootMap.get(listNodeName);
if (var11 instanceof Map) {
ArrayList list = new ArrayList();
list.add((Map) var11);
list.add(var10);
rootMap.remove(listNodeName);
rootMap.put(listNodeName, list);
}
if (var11 instanceof List) {
List var12 = (List) var11;
var12.add(var10);
}
} else {
tempMap.put(element.getNodeName(), value);
}
}
private static String[] getParentNames(Element element, String listNodeName) {
ArrayList list = new ArrayList();
for (String key = element.getParentNode().getNodeName(); !key.equals(listNodeName); key = element.getParentNode().getNodeName()) {
list.add(key);
}
list.add(listNodeName);
return (String[]) list.toArray();
}
private static void doTravelWithNoSpecified(Element node, Map<String, Object> map) {
for (int i = 0; i < node.getChildNodes().getLength(); ++i) {
Node tempNode = node.getChildNodes().item(i);
doParaser(tempNode, map, (String) null);
}
}
private static Map<String, Object> buildMap(String[] keys, String[] values) {
HashMap map = new HashMap();
for (int i = 0; i < keys.length; ++i) {
map.put(keys[i], values[i]);
}
return map;
}
}
xml解析的工具类
最新推荐文章于 2019-08-16 17:01:07 发布