XML语法详解

概述

两种解析方式
1.SAX解析
2.DOM解析

Dom常见的解析工具

DOM解析解析文档对象模型

Dom4J解析XML文件

Dom4J官网: https://dom4j.github.io/

实现步骤

1.下载Dom4j框架;
2.在项目中创建一个文件夹:lib;
3.将dom4j-2.1.1.jar文件复制到 lib 文件夹;
4.在jar文件上点右键,选择 Add as Library -> 点击OK;
5.在类中导包使用;

构造器、方法

Dom4J的解析思想
得到文档对象Document,从中获取元素对象和内容。

SAXReader类

构造器 说明
public SAXReader() 创建Dom4J的解析器对象
Document read(String url) 加载XML文件成为Document对象

Document类

方法 说明
Element getRootElement() 获得根元素对象
List<Element> elements() 得到当前元素下所有子元素
List<Element> elements(String name) 得到当前元素下指定名字的子元素返回集合
Element element(String name) 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
String getName() 得到元素名字
String attributeValue(String name) 通过属性名直接得到属性值
String elementText(子元素名) 得到指定名称的子元素的文本
String getText() 得到文本

代码示例

Dom4JDemo1.java

public class Dom4JDemo1 {@Testpublic void parseXMLData() throws Exception {// 1、创建一个Dom4j的解析器对象,代表了整个dom4j框架SAXReader saxReader = new SAXReader();// 2、把XML文件加载到内存中成为一个Document文档对象// Document document = saxReader.read(new File("xml-app\\src\\Contacts.xml")); // 需要通过模块名去定位// Document document = saxReader.read(new FileInputStream("xml-app\\src\\Contacts.xml"));// 注意: getResourceAsStream中的/是直接去src下寻找的文件InputStream is = Dom4JDemo1.class.getResourceAsStream("/Contacts.xml");Document document = saxReader.read(is);// 3、获取根元素对象Element root = document.getRootElement();System.out.println(root.getName());// 4、拿根元素下的全部子元素对象(一级)// List<Element> sonEles =  root.elements();List<Element> sonEles =  root.elements("contact");for (Element sonEle : sonEles) {System.out.println(sonEle.getName());}// 拿某个子元素Element userEle = root.element("user");System.out.println(userEle.getName());// 默认提取第一个子元素对象 (Java语言。)Element contact = root.element("contact");// 获取子元素文本System.out.println(contact.elementText("name"));// 去掉前后空格System.out.println(contact.elementTextTrim("name"));// 获取当前元素下的子元素对象Element email = contact.element("email");System.out.println(email.getText());// 去掉前后空格System.out.println(email.getTextTrim());// 根据元素获取属性值Attribute idAttr = contact.attribute("id");System.out.println(idAttr.getName() + "-->" + idAttr.getValue());// 直接提取属性值System.out.println(contact.attributeValue("id"));System.out.println(contact.attributeValue("vip"));}
}

Contacts.xml

<?xml version="1.0" encoding="UTF-8"?>
<contactList><contact id="1" vip="true"><name>   潘金莲  </name><gender>女</gender><email>panpan@itcast.cn</email></contact><contact id="2" vip="false"><name>武松</name><gender>男</gender><email>wusong@itcast.cn</email></contact><contact id="3" vip="false"><name>武大狼</name><gender>男</gender><email>wuda@itcast.cn</email></contact><user></user>
</contactList>

XML检索技术:Xpath

XPath介绍

XPath使用路径表达式来定位XML文档中的元素节点或属性节点,Xpath技术更加适合做信息检索。

使用流程

1.导入jar包(dom4j和jaxen-1.1.2.jar),Xpath技术依赖Dom4j技术;
2.通过dom4j的SAXReader获取Document对象;
3.利用XPath提供的API,结合XPath的语法完成选取XML文档元素节点进行解析操作;

方法 说明
Node selectSingleNode("表达式") 获取符合表达式的唯一元素
List<Node> selectNodes("表达式") 获取符合表达式的元素集合

Xpath的检索方法

1.绝对路径

/根元素/子元素/孙元素
采用绝对路径获取从根节点开始逐层的查找节点列表并返回信息。
从根元素开始,一级一级向下查找,不能跨级。

2.相对路径

./子元素/孙元素
先得到根节点,再采用相对路径获取下一级节点的子节点并返回信息。
从当前元素开始,一级一级向下查找,不能跨级。

3.全文检索

直接全文搜索所有的指定元素并返回。

4.属性查找

在全文中搜索属性,或者带属性的元素。

代码示例

XPathDemo.java

public class XPathDemo {/**1.绝对路径: /根元素/子元素/子元素。*/@Testpublic void parse01() throws Exception {// a、创建解析器对象SAXReader saxReader = new SAXReader();// b、把XML加载成Document文档对象Document document =saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));// c、检索全部的名称List<Node> nameNodes = document.selectNodes("/contactList/contact/name");for (Node nameNode : nameNodes) {Element  nameEle = (Element) nameNode;System.out.println(nameEle.getTextTrim());}}/**2.相对路径: ./子元素/子元素。 (.代表了当前元素)*/@Testpublic void parse02() throws Exception {// a、创建解析器对象SAXReader saxReader = new SAXReader();// b、把XML加载成Document文档对象Document document =saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));Element root = document.getRootElement();// c、检索全部的名称List<Node> nameNodes = root.selectNodes("./contact/name");for (Node nameNode : nameNodes) {Element  nameEle = (Element) nameNode;System.out.println(nameEle.getTextTrim());}}/**3.全文搜索://元素  在全文找这个元素//元素1/元素2  在全文找元素1下面的一级元素2//元素1//元素2  在全文找元素1下面的全部元素2*/@Testpublic void parse03() throws Exception {// a、创建解析器对象SAXReader saxReader = new SAXReader();// b、把XML加载成Document文档对象Document document =saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));// c、检索数据//List<Node> nameNodes = document.selectNodes("//name");// List<Node> nameNodes = document.selectNodes("//contact/name");List<Node> nameNodes = document.selectNodes("//contact//name");for (Node nameNode : nameNodes) {Element  nameEle = (Element) nameNode;System.out.println(nameEle.getTextTrim());}}/**4.属性查找。//@属性名称  在全文检索属性对象。//元素[@属性名称]  在全文检索包含该属性的元素对象。//元素[@属性名称=值]  在全文检索包含该属性的元素且属性值为该值的元素对象。*/@Testpublic void parse04() throws Exception {// a、创建解析器对象SAXReader saxReader = new SAXReader();// b、把XML加载成Document文档对象Document document =saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));// c、检索数据List<Node> nodes = document.selectNodes("//@id");for (Node node : nodes) {Attribute attr = (Attribute) node;System.out.println(attr.getName() + "===>" + attr.getValue());}// 查询name元素(包含id属性的)
//      Node node = document.selectSingleNode("//name[@id]");Node node = document.selectSingleNode("//name[@id=888]");Element ele = (Element) node;System.out.println(ele.getTextTrim());}
}

Contacts2.xml

<?xml version="1.0" encoding="UTF-8"?>
<contactList><contact id="1" vip="true"><name>   潘金莲  </name><gender>女</gender><email>panpan@itcast.cn</email></contact><contact id="2" vip="false"><name>武松</name><gender>男</gender><email>wusong@itcast.cn</email></contact><contact id="3" vip="false"><name>武大狼</name><gender>男</gender><email>wuda@itcast.cn</email></contact><user><contact><info><name id="888">我是西门庆</name></info></contact></user>
</contactList>

Dom4J解析XML、Xpath检索XML相关推荐

  1. java 解析xml xmlns_dom4j解析带有xmlns的xml文件

    dom4j解析带有xmlns的xml文件 上一篇 / 下一篇  2013-01-22 10:03:23 / 个人分类:Java学习 使用dom4j来解析带有命名空间的xml文件, 由于dom4j的xp ...

  2. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  3. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  4. Java基础加强重温_13:XML(可拓展标记语言)、XML语法、XML约束、XML解析(Dom4j,JAXP)、Dom4j基本使用、Xpath表达式(XML路径语言)、XML解析综合案例

    摘要 Java基础加强重温_13: XML(可拓展标记语言.作用:小型数据库.框架配置文件.不同平台数据交换). XML语法(文档.标签/元素.属性.注释.转义字符.CDTA区) XML约束(DTD约 ...

  5. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  6. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  7. java xml dom4j 解析_Java使用DOM4J解析XML

    Dom4J方式解析XML文件.dom4j是非官方提供的xml文件解析方式,因此需要去第三方下载dom4j的jar包 File file = new File("D:\\chengmuzhe\ ...

  8. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  9. 使用DOM4J解析XML及采用Schema校验的方法

    使用DOM4J解析XML及采用Schema校验的方法 Validation Currently dom4j does not come with a validation engine. You ar ...

最新文章

  1. Oracle 系统表大全
  2. 联想sr950配置raid卡_联想服务器ThinkSeverRAID卡设置教程
  3. 学点 C 语言(9): if 语句
  4. java转net_将java库转换为.net库
  5. mysql新增表字段回滚_MySql学习笔记四
  6. GitHub 断供危机来了!权威解读程序员应对指南 | CSDN 独家
  7. cad通过钢筋大样生成钢筋明细表插件_如何设计一套建筑电气CAD施工图?看完你就知道!涨知识...
  8. Android Activity 生命周期
  9. 【NOIP2017】【Luogu3951】小凯的疑惑
  10. MySQL查询用户行为,网站用户行为分析
  11. 解决sql插入中文问题
  12. 10247: 爱好数学的国王(唯一分解定理)
  13. sd卡重新分区以及格式化
  14. 图论1:哥尼斯堡七桥问题的证明
  15. CTR预估:计算广告的应用(1)——理论
  16. Arduino Uno 与 触摸模块 ttp223 实验详录
  17. CocosCreator Shader学习(三):放大镜缩小镜效果
  18. H5页面设置背景图,微信可浏览背景图
  19. java ts流封装工具_从 Java 到 TS,阿里妈妈的接口管理一把梭
  20. linux输入法大小,推荐linux下的输入法--五笔+拼音

热门文章

  1. 微信,是怎么过来的(2010-2015)
  2. resultMap的用法
  3. Computer Graphics From Scratch - Chapter 6
  4. linux设置BIOS串口,将x86平台的Linux控制台重定向到串口
  5. 单细胞论文记录(part6)--SpaGE: Spatial Gene Enhancement using scRNA-seq
  6. C语言:如何让printf输出更加美化(用游戏英雄属性作例子)
  7. 用DW敲-打地鼠小游戏
  8. 推荐几个不错的 CSS 工具,持续收录!
  9. 终于解决了fedora 16下chromium浏览器Shockwave Flash崩溃的问题
  10. 系统u盘怎么改回普通_系统u盘怎么改回普通_u盘启动盘恢复成普通u盘u盘操作系统_详细教您怎么把系统装进U盘......