文档章节

dom解析

Jenly
 Jenly
发布于 2016/09/18 15:37
字数 339
阅读 4
收藏 0

上一篇说到了pull解析、针对于pull解析做了一个封装、虽然在android里面推荐用pull解析、但是dom解析作为java三种常用的解析方法之一、没研究其速度方面哪个更好、对于dom解析、个人感觉还是很不错的、至少在封装的时候、可以封装的更抽象点、直接解析一个完整的xml、

/**
	 * 解析XML
	 * @param inputStream
	 * @param startNode
	 * @return
	 */
	public static List<HashMap<String,String>> parserXml(InputStream inputStream,String startNode){
		
		List<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
		HashMap<String, String> map = null;
		
		try {
			//解析器实例化
			DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			
			Document document = builder.parse(inputStream);
			
			NodeList nodeList = null;
			
			if(null!=startNode){
				nodeList = document.getElementsByTagName(startNode);
			}else{
				nodeList = document.getChildNodes();
			}
			
			for(int i = 0;i<nodeList.getLength();i++){
				map = new HashMap<String,String>();
				Node node = nodeList.item(i);
				LogUtils.logI("-------------------------------->"+i+"\t节点:"+node.getNodeName());
				if(node.hasChildNodes()){//判断是否有子节点
					NodeList nodes = node.getChildNodes();
					
					for(int j= 0;j<nodes.getLength();j++){
						Node n = nodes.item(j);
						map.put(n.getNodeName(),n.getTextContent());
						LogUtils.logI(j+"\t节点:"+n.getNodeName()+"\t----------->\t"+n.getTextContent());
					}
				}
				
				if(null!=map&&map.size()>0){
					list.add(map);
				}
			}
			
			
		} catch (ParserConfigurationException e) {
			LogUtils.logE("解析器配置异常:"+e.getMessage());
		} catch (SAXException e) {
			LogUtils.logE("解析异常:"+e.getMessage());
		} catch (IOException e) {
			LogUtils.logE("IO异常:"+e.getMessage());
		} catch (Exception e) {
			LogUtils.logE("异常:"+e.getMessage());
		}
		
		return list;
		
	}

可以传个头节点、也可以传个null、在上面代码(null!=startNode)做了个预处理判断、传null则表示解析完整xml、

ps:针对于dom也做了个封装、此封装方法适合一般列表式二级xml解析、

本文转载自:http://blog.csdn.net/jenly121/article/details/9411511

Jenly

Jenly

粉丝 0
博文 35
码字总数 0
作品 0
深圳
私信 提问
XML生成和解析

1、DOM方式解析XML 给予DOM的解析方式,是把整个XML文档加载到内存,转化成DOM树,可以随机的访问DOM树的任何数据,速度快、比较灵活,但是消耗资源比较多,不适用大的xml文档解析,测试超过...

祁猛
2016/10/19
35
0
xml的2种解析方式(DOM和SAX解析方式)

1、xml的解析的简介() * dom和sax区别 ==================================================================== 1、xml的解析的简介(写到java代码)(今天最重要的内容*) * xml是标记型文...

Eric-Zhou
02/28
5
0
JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较

JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较 1.各种方式的详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的 官方W3C标准。DOM是以层次结构组织...

_xiaotudou
2014/03/28
254
0
android xml解析的三种方式

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析...

球球
2016/09/24
14
0
渲染树的形成原理你真的很懂吗?

系列文章 说一下为什么写这个系列? 原因一:该文章系列不管你是前端开发者,还是后端开发者在面试中经常会被问到一个问题 一个常见的问题,看了该系列绝对能惊到面试官,可能就因为这一道面...

ikoala
10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哈希

第一个只出现一次的字符的位置

Garphy
31分钟前
23
0
Centos7.7之离线安装kubectl

Centos7.7,kubernates-1.13.5. 我的Centos7.7上已经安装了kubernates 1.13.5,但是没有kubectl命令,手动安装 浏览器中访问https://storage.googleapis.com/kubernetes-release/release/sta......

克虏伯
33分钟前
33
0
redis原理及应用

一、redis来源 二、数据类型 三、主流的应用场景 四、特性 五、补充 一、 redis来源 redis作者:Salvatore Sanfilippo (antirez),男,意大利人. 需求:一个访客信息追踪网站,网站可以通过...

天子剑毅
41分钟前
35
0
12_多线程

12_多线程 wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器(释放锁)。 notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个...

行者终成事
46分钟前
40
0
图片的切换功能

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; ......

zhengzhixiang
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部