xml解析:
解析方式:
1.sax:特点:逐行解析,只能查询.
2.dom:特点:一次性将文档加载到内容中,形成一个dom树.可以对dom树curd操作
解析技术:
JAXP:sun公司提供支持DOM和SAX开发包
JDom:dom4j兄弟
jsoup:一种处理HTML特定解析开发包
★dom4j:比较常用的解析开发包,hibernate底层采用。
演示用XML代码:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5"> 3 <servlet> 4 <servlet-name>HelloMyServlet</servlet-name> 5 <servlet-class>cn.itcase.HelloMyServlet</servlet-class> 6 </servlet> 7 <servlet-mapping> 8 <servlet-name>HelloMyServlet</servlet-name> 9 <url-pattern>/hello</url-pattern> 10 </servlet-mapping> 11 </web-app>
dom4j技术进行查询操作.
使用步骤:
1.导入jar包
2.创建一个核心对象 SAXReader
new SAXReader();
3.将xml文档加载到内存中形成一棵树
Document doc=reader.read(文件)
4.获取根节点
Element root=doc.getRootElement();
5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
获取所有的子元素
List<Element> list=root.elements()
获取元素的指定属性内容
String value=root.attributeValue("属性名");
获取子标签标签体:遍历list 获取到每一个子元素
String text=ele.elementText("子标签名称")
代码演示:
1 //创建对象 2 SAXReader saxReader = new SAXReader(); 3 //将xml文档加载到内存当中 4 Document document = saxReader.read("D:\workspace\mylanqiao\src\day8_26\demo.xml"); 5 //获取根节点 6 Element root = document.getRootElement(); 7 //通过根节点操作其他节点 8 List<Element> elements = root.elements(); 9 //操作1:获取所有子元素 10 for (Element ele : elements) { 11 //操作2:获取元素的指定属性内容 12 //操作3:获取标签体,遍历list获取每一个子元素 13 /*String elementText = ele.elementText("servlet-name"); 14 System.out.println(elementText); 15 */ 16 //获取另一个标签体 17 System.out.println(ele.elementText("url-pattern")); 18 /* 19 * 第一个标签没有就返回一个空值 20 * null 21 /hello*/ 22 } 23 //获取根节点的属性 24 System.out.println(root.attributeValue("version"));
xpath解析技术:(扩展)
依赖于dom4j
使用步骤:
1.导入jar包(dom4j和jaxen-1.1-beta-6.jar)
2.加载xml文件到内存中
3.使用api
selectNode("表达式");
selectSingleNode("表达式");
表达式的写法:
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
例如一个标签下有一个id属性且有值 id=2;
//元素名[@属性名='属性值']
//元素名[@id='2']
代码演示:
1 //加载dom树 2 Document document = new SAXReader().read("D:\workspace\mylanqiao\src\day8_26\demo.xml"); 3 //获取多个节点 4 // List<Element> selectNodes = document.selectNodes("/web-app/servlet/servlet-name"); 5 // Element ele = selectNodes.get(0); 6 // System.out.println(ele.getText()); 7 // 8 //获取某个节点 9 Element element = (Element) document.selectSingleNode("//servlet/servlet-name"); 10 //返回值是Node,强转成element,//代表不从根节点开始找 11 System.out.println(element.getText());