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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值