XML的DOM解析

利用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;
	}
}

你可能感兴趣的:(xml)