【增删改查】怎么使用Dom4j结合Xpath解析xml文件?

XML概述:

  1. XML:EXtensible Markup Language(可扩展标记语言)
  2. XML文件的应用场景:
* 存储数据:一对多,多个键值对的映射关系。
* 用作配置文件:如pom.xml。
* 传输数据:使用xml文件传输数据。
* 充当小型数据库
  1. 标签的定义:
  • 有始有终
<a> </a>
  • 合理嵌套
<a> <b></b> </a>
  1. 名称的规则:
* 不能包含冒号和空格。
* 不能以xml、XML、Xml开头。
* 名称不能以数字或标点符号开始。
* xml代码区分大小写。
  1. 属性的定义:
  • 一个标签上可有多个属性:
<a id1="abc" id2="bac"></a>
  • 属性名称和值之间使用 = 连接,属性值用引号""包起来。
  1. 注释:注释不能嵌套,并且不能放到第一行,第一行必须为文档声明。<?xml version="1.0" encoding="UTF-8"?>
  2. 特殊字符:(替换为实体引用,eg:文本中有<会被解析为新元素的开始)
特殊符号预定义实体特殊符号预定义实体
&&amp;"&qout;
<&lt;&apos;
  1. CDATA区:
  • 可以解决多个字符都需要转义的操作,if(a<b&&b<c&&c<d){},把这些语句放到CDATA区里面,就不会被转义了。
  • 写法:
<![CDATA[内容]]>
  1. XML约束:
    通过XMl约束,约束XML文档的格式规范,保证xml文档结构,元素与元素之间的关系,属性的取值是否符合要求,保证数据的合法性。
* DTD:以.dtd后缀结尾(Document Type Definition)
* Schema:以.xsd后缀结尾 
  1. Schema约束:XML Schema描述xml文档的结构,是基于xml的DTD的替代品,DTD里有CDATA类型,但在schema里支持更多的数据类型。
* 引入xsd文件命名空间 xsi:schemaLocation:"http://www.bwh.cn/xmlstudent.xsd"
* 为每一个xsd约束声明一个前缀,作为标识xmlns=http://www.bwh.cn/xml
* XSD就是书写XML的格式模板,XML中引用的标签和书写内容要符合XSD文档中的要求格式

Dom4j技术介绍:

  1. dom4j解析xml的类库。
  2. 解析步骤:
  • 创建一个SAXReader解析器:SAXReader reader = new SAXReader();
  • 获取Document对象:Document doc = reader.read(file);
  • 根据相关方法去处理Document对象。
    3.常用方法简介:
  • 节点相关:
getRootElement();getName();getText();setText();addElement();parentElm.remove(childElm);
  • 属性相关:attributeValue();
  1. dom4j里提供了两个方法,用来支持xpath API:
 selectNodes("xpath表达式");
 selectSingleNode("xpath表达式");
  1. 注意:虽然dom4j支持xpath,但在利用xpath时需要引用jaxen-xx-xx.jar,否则会报java.lang.NoClassDefFoundError:org/jaxen/JaxenException异常。

Xpath技术介绍:

  1. Xpath:XML Path Language(XMl路径语言)
  2. 用处:利用xpath主要解决元素定位问题。
  3. 为什么要写Xpath?
* 元素没有id,name,class等明显或唯一属性。
* 元素id是动态的。
* 元素定位工具抓取不到。
* 复制xpath不稳定:元素本身没有变化,其他元素修改导致该元素定位失效。
* 迅速在全文导航到相关元素。
  1. 语法规则:
表示符含义表示符含义
/根节点//任意位置
*任意元素@,text()属性,文本
.当前节点父级节点
  1. 格式:
  • 属性:
//*[@属性='属性值']
  • 文本值:
//*[text()='文本值']
  • 属性是动态的:starts-with:
//*[starts-with(@id,'view')]
//*[starts-with(text(),'开发')]
  • 根据上下级:
//*[@type='password']/../../div[3]
  • 多个条件,用and连接:
//*[@class='mmaa'and @type='password']
//*[name()="aaa"and@ID='sss']
  • contains模糊查询:
//*[contains(@属性,值)]
//*[contains(text(),值)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值