利用dom方法解析xml文档,返回标签名和标签值的map集合
public class ModeXml {
private static DocumentBuilderFactory factory = null;
private static DocumentBuilder builder = null;
static{
factory = DocumentBuilderFactory.newInstance();
try {
builder = factory.newDocumentBuilder();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* xml解析
* @param xmlFilePath
* @return
*/
public static List<Map<String , String>> mode(String xmlFilePath){
try {
List<Map<String,String>> lists = new ArrayList<Map<String , String>>();
Map<String , String> map = null;
Document document = builder.parse(ModeXml.class.getClassLoader().getResourceAsStream(xmlFilePath));
document.normalize();
Element root = document.getDocumentElement();//获得根标签
NodeList childs = root.getChildNodes();
//遍历根标签下面的子标签
for (int i = 0 ; i < childs.getLength(); i++){
map = new HashMap<String , String>();
Node node=childs.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
map = checkXml(node,map);
lists.add(map);
}
}
return lists;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 获得标签下面的子标签
* @param node
* @param map
* @return
*/
private static Map<String , String> checkXml(Node node,Map<String, String> map){
if(node.hasChildNodes()){
if(node.getNodeType()==Node.ELEMENT_NODE){
NodeList lists = node.getChildNodes();
for(int i = 0 ;i < lists.getLength();i++){
Node ne = lists.item(i);
if(ne.getNodeType() == Node.ELEMENT_NODE){
if(ne.getChildNodes().getLength() > 1){
checkXml(ne,map);
continue;
}
String nodeName = ne.getNodeName();
String nodeValue = ne.getFirstChild().getNodeValue();
map.put(nodeName, nodeValue);
}
}
}
}
return map;
}
}