XML文档编写及XPath表达式

本文介绍了XML的基本概念,包括其语法和结构,探讨了语义约束如DTD和XML Schema的定义方式。接着,文章详细讲解了Dom4j库在处理XML文档中的作用,并阐述了XPath表达式的使用,包括基本表达式和谓语表达式,最后通过实例展示了XML文件的读写和XPath查询操作。
摘要由CSDN通过智能技术生成
XML简介

XML是可扩展标记语言(Extensible Markup Language,XML)缩写,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。可以用于Java程序配置描述文件、保存产生的数据、网络间数据传输等。

XML语法&结构

XML文档结构

  1. 第一行需是XML文档声明
  2. 有且只有一个根节点
  3. 书写规则与HTML相同

标签名使用小写英文, 单词间用-分隔
多级标签之间不要存在重名

对特殊符号使用实体引用或CDATA标签
5种实体引用

&lt; <
&gt; >
&amp; &
&apos; '
&quot; "

CDATA标签:
<![CDATA[不希望由XML解析的文本数据]]>

XML语义约束
语义约束的两种定义方式:DTDXML Schema
DTD
利用DTD中的<!ELEMENT>标签定义XML文档中允许出现的节点及数量
例: <!ELEMENT hr (employee)>
<!ELMENT name(#PCDATA)> 定义name标签体只能是文本
使用描述符表达子节点数量
+ 至少出现1个子节点
* 可出现0…n个子节点
?最多出现1个子节点
在XML中使用<!DOCTYPE>标签来引用DTD文件。
书写格式:
<!DOCTYPE 根节点 SYSTEM "dtd文件路径">

Schema
比DTD更复杂
XML Schema提供了数据类型、格式限定、数据范围等特性
<schema xmlns="http://www.w3.org/2001/XMLSchema">
声明文本是Schema
<element>代表标签节点
<complexType>复杂节点, 标签包含子节点时使用
<sequence>子标签按顺序排列
<attribute>设置属性
标签属性:
name= 属性名称
type= 属性值类型
use=“required” 属性必须存在
minOccurs=“n” 最小出现次数
maxOccurs=“n” 最大出现次数
<simpleType>简单类型。 代替属性:type使用
<restriction>限定数据类型
base=“xx” 基本类型
<minInclusive value="">最小数据范围
<maxInclusive value="">最大数据范围
在XML文本的根节点添加

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Schema文件路径" 

属性来关联schema文本

Dom4j

Dom4j是java用来读取和操作xml文档的一种方式。
DOM(Document Object Model) 文档对象模型把xml文档看做一个树结构
Dom4j的含义和作用

  1. 将xml文件视为Document对象
  2. 将xml文件中的标签视为Element对象
    使用时需下载dom4j的jar包并导入。
XPath

基本表达式
nodename: 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点
. 当前节点
.. 当前节点的父节点
@ 选取属性
谓语表达式
[1] 第一个匹配的元素
[last()] 最后一个匹配的元素
[last()-1] 倒数第二个匹配的元素
[position()<3] 最前面两个匹配的元素
[@lang] 选取所有拥有lang属性的元素
[@lang='value'] 选取所有包含lang属性且属性值为value的元素
[price>35.00] 选取price元素值大于35.00的元素

总结

下面是我写的一个例子:
XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE hr SYSTEM "NewFile.dtd"> --><!-- 人力资源管理系统 -->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="hr.xsd">
	//xml schema文件名为hr.xsd
	<employee no="3309">
		<name>张三</name>
		<age>31</age>
		<salary>4000</salary>
		<department>
			<dname>会计部</dname>
			<address>b103</address>
		</department>
	</employee>
	<employee no="3310">
		<name>李四</name>
		<age>22</age>
		<salary>4000</salary>
		<department>
			<dname>会计部</dname>
			<address>b103</address>
		</department>
	</employee>

	<employee no="3311"
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值