dom4j相关

 dom4j解析xml
一:
SAXReader reader = new SAXReader();


InputStream is = new BufferedInputStream(new FileInputStream(xx.xml));

/*Document doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)); */
//getResourceAsStream返回读取指定资源的输入流。


Document document = reader.read(is);
Element element = document.getRootElement();
List<Element> elements = element.elements("Resource");
for(Element e : elements){e.attributeValue("driverClassName")}

 

 

 底层的解析器主要有两种: DOM、SAX。 其中DOM作为树型结构将文本装载到内存中,适合文本内容比较小的;SAX则按照流的方式扫描,事件触发的方式供你处理,比如遇到某个结点的开始符,结束符,大文本不能一次性装载到内存中,就应该采用SAX方式。

 

SAX:只能读,不能修改,只能顺序访问,适合对大型的XML的解析,解析速度快!
DOM:不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,只适合解析小型文档

Sax解析  http://sinye.iteye.com/blog/763895

Dom解析 http://sinye.iteye.com/blog/763926

sax与dom区别:http://blog.csdn.net/sweetsnow24/article/details/7447110

 

二 namespace问题

                        Map map = new HashMap();
			map.put("ns", "http://WebXml.com.cn/");
			SAXReader saxReader = new SAXReader();
			saxReader.getDocumentFactory().setXPathNamespaceURIs(map);

			document = saxReader.read(TestXml.class.getClassLoader()
					.getResourceAsStream(xml));
			Node root = document.getRootElement();

			List<Element> elements = root
					.selectNodes("/getWeatherbyCityNameResponse/ns:getWeatherbyCityNameResult/ns:string");
			System.out.println(elements.size()+" "+elements);

 

                        
                        Document document = DocumentHelper.parseText(xml);
			Map map = new HashMap();
			// ns自己定义
			map.put("ns", "http://WebXml.com.cn/");
			// 根元素不是必须带ns: 或者 相对查找 ns:getWeatherbyCityNameResult/ns:string 或者
			// //ns:string
			XPath x = document
					.createXPath("/getWeatherbyCityNameResponse/ns:getWeatherbyCityNameResult/ns:string");
			x.setNamespaceURIs(map);
			List<Element> nodelist = x.selectNodes(document);

			for (Element e : nodelist) {
				list.add(e.getText());
			}

 

你可能感兴趣的:(dom4j)