xml转Map(递归调用读取XML全部节点内容)
/**
* like12 add,20220601,递归调用读取XML全部节点内容
* xml转Map
* @param xmlStr
* @return
* @throws Exception
*/
public static Map<String, Object> xmlToMap(String xmlStr) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
//将xml格式的字符串转换成Document对象
Document doc = DocumentHelper.parseText(xmlStr);
//获取根节点
Element root = doc.getRootElement();
//递归调用
map = iteratorFunc(root, map);
return map;
}
/**
* 递归调用
* @param root
* @param map
* @return
*/
public static Map<String, Object> iteratorFunc(Element root, Map<String, Object> map) {
// 通过element对象的elementIterator方法获取迭代器
Iterator it = root.elementIterator();
// 遍历迭代器,获取根节点中的信息
while (it.hasNext()) {
Element book = (Element) it.next();
map.put(book.getName(), book.getTextTrim());
System.out.println(book.getName() + " " + book.getTextTrim());
//递归
map = iteratorFunc(book, map);
}
return map;
}
读取XML readXml
// 读取XML
@SuppressWarnings({ "rawtypes" })
public Map<String, Object> readXml(String strIn) {
String retCode = null;
String retDesc = null;
String retValue = null;
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
try {
//String转InputStream
ByteArrayInputStream byteArrayInputStream = null;
try {
byteArrayInputStream = new ByteArrayInputStream(
strIn.getBytes("GBK"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStream in = (InputStream)byteArrayInputStream;
// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
org.dom4j.Document document = reader.read(in);
//Document document = reader.read(new File("D://test.xml"));
// 通过document对象获取根节点bookstore
Element bookStore = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator it = bookStore.elementIterator();
// 遍历迭代器,获取根节点中的信息(书籍)
while (it.hasNext()) {
//System.out.println("=====开始遍历某一本书=====");
Element book = (Element) it.next();
/*// 获取book的属性名以及 属性值
List<Attribute> bookAttrs = book.attributes();
for (Attribute attr : bookAttrs) {
System.out.println("属性名:" + attr.getName() + "--属性值:"
+ attr.getValue());
}*/
Iterator it2 = book.elementIterator();
while (it2.hasNext()) {
Element book2 = (Element) it2.next();
//System.out.println("节点名:" + book2.getName() + "--节点值:"
//+ book2.getStringValue());
if ("retCode".equals(book2.getName())) {
retCode = book2.getStringValue();
} else if ("retDesc".equals(book2.getName())) {
retDesc = book2.getStringValue();
} else if ("retValue".equals(book2.getName())) {
retValue = book2.getStringValue();
}
}
//System.out.println("=====结束遍历某一本书=====");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Map<String, Object> params = new HashMap<String, Object>();
params.put("retCode", retCode);
params.put("retDesc", retDesc);
params.put("retValue", retValue);
return params;
}