JavaWeb基础知识day06——XML&XML解析
什么是XML?
XML是指可扩展标记语言(eXtensible Markup Language),
它是一种标记语言,很类似HTML。它被设计的宗旨描述数据【一般用作:配置文件】,而非显示数据。
应用:在Java开发中,传统的配置文件是*.properties属性文件(key=value),
而XML表示的数据更为丰富。XML技术除用于描述有关系的数据外,还经常用作软件配置文件,以描述程序模块之间的关系。(如的Struts、Spring和Hibernate等框架都是基于XML作为配置文件的)在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。
XML文档的组成
一个XML文件一般由以下几部分组成:文档声明、元素、元素的属性、注释、CDATA区、特殊字符。
文档声明
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行第一列。
<?xml version="1.0" encoding="UTF-8"?>
要求:
必须在xml文件的第一行
必须顶格写
元素
元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点,但必须遵守下面的一些规范:
1.严格区分大小写;<p><P>
2.只能以字母或下划线开头;abc _abc
3.不能以xml(或XML、Xml、xMl、XML等)开头----W3C保留日后使用;
4.名称字符之间不能有空格或制表符;
5.名称字符之间不能使用冒号; (有特殊用途)
6.XML元素指XML文件中出现的标签。一个标签分为开始和结束标签(不能省略)。
一个标签有如下几种书写形式:
包含标签体:<age>18</age> <Student><name></name><age>18</age></Student>
不含标签体:<Student name="zhangsan" age="18"/>
一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
<mytag1><mytag2></mytag1> </mytag2>WRONG
<mytag1><mytag2></mytag2></mytag1> RIGHT
一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
元素的属性
一个元素可以有多个属性,每个属性都有它自己的名称和取值。
属性值一定要用引号(单引号或双引号)引起来。
属性名称的命名规范与元素的命名规范相同、元素中的属性是不允许重复的。
注释
XML中的注释语法为:注意:<!--这是注释-->
XML声明之前不能有注释
注释不能嵌套
CDATA区
CDATA是Character Data的缩写
作用:把标签当做普通文本内容;
语法:<![CDATA[内容]]>
举例:
<![CDATA[
<itheima>www.itheima.com</itheima>
]]> 被当做普通文本而不是标签
特殊字符
特殊字符 替代符号
& &
< <
> >
" "
' '
xml约束:
作用:规定xml中可以出现那些元素及那些属性,以及他们出现的顺序.
约束的分类:
DTD约束:struts hiebernate等等
SCHEMA约束:tomcat spring等等
DTD约束:
和xml的关联 (一般都会提供好,复制过来即可,有时候连复制都不需要.)
方式1:内部关联
格式:
<!DOCTYPE 根元素名 [dtd语法]>
方式2:外部关联-系统关联
格式:
<!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
例如:
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
方式3:外部关联-公共关联
格式:
<!DOCTYPE 根元素名 PUBLIC "约束文件的名称" "约束文件的位置">
dtd语法(了解)
元素:
<!Element 元素名称 数据类型|包含内容>
数据类型:
#PCDATA:普通文本 使用的时候一般用()引起来
包含内容:
该元素下可以出现那些元素 用()引起来
符号:
* 出现任意次
? 出现1次或者0次
+ 出现至少1次
| 或者
() 分组
, 顺序
属性:
格式:
<!ATTLIST 元素名 属性名 属性类型 属性是否必须出现>
属性类型:
ID:唯一
CDATA:普通文本
属性是否必须出现
REQUIRED:必须出现
IMPLIED:可以不出现
一个xml文档中只能添加一个DTD约束
SCHEMA约束:
一个xml文档中可以添加多个schema约束
xml和schema的关联.
格式:
<根标签 xmlns="..." ...>
<根标签 xmlns:别名="..." ...>
名称空间:
关联约束文件
规定元素是来源于那个约束文件的
例如:
一个约束文件中规定 table(表格) 表格有属性 row和col
还有一个约束文件规定 table(桌子) 桌子有属性 width和height
在同一个xml中万一我把两个约束文件都导入了,
在xml中我写一个table,这个table有什么属性????
我们为了避免这种情况的发生,可以给其中的一个约束起个别名
使用的时候若是没有加别名那就代表是来自于没有别名的约束文件
例如 table(表格) 给他起个别名 xmlns:a="..."
在案例中使用 a:table 代表的是表格
若在案例中直接使用 table 代表的是桌子
在一个xml文件中只能有一个不起别名;
注意:
schema约束本身也是xml文件.
xml解析:
解析方式:
1.sax:特点:逐行解析,只能查询.
2.dom:特点:一次性将文档加载到内容中,形成一个dom树.可以对dom树curd操作
解析技术:
JAXP:sun公司提供支持DOM和SAX开发包
JDom:dom4j兄弟
jsoup:一种处理HTML特定解析开发包
★dom4j:比较常用的解析开发包,hibernate底层采用。
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 获取到每一个子元素
for(Element ele : list){...}
String text=ele.elementText("子标签名称")
[code]public static void main(String[] args) throws Excep 20000 tion { //创建核心对象 SAXReader reader = new SAXReader(); //获取dom树 Document doc = reader.read("D:\\eclipsewk\\28\\day08\\xml\\web.xml"); //获取根节点 Element root=doc.getRootElement(); //获取其他节点 List<Element> list = root.elements(); //遍历集合 for (Element ele : list) { //获取servlet-name的标签体 String text = ele.elementText("servlet-name"); //System.out.println(text); //获取url-pattern标签体 //System.out.println(ele.elementText("url-pattern")); } //获取root的version属性值 String value = root.attributeValue("version"); System.out.println(value); }
xpath解析技术:(扩展)
依赖于dom4j
使用步骤:
1.导入jar包(dom4j和jaxen-1.1-beta-6.jar)
2.加载xml文件到内存中
//加载dom树
Document doc = new SAXReader().read("E://develop//workspace//day08//xml//web.xml");
3.使用api
selectNodes("表达式");
selectSingleNode("表达式");
//获取节点
List list = doc.selectNodes("/web-app/servlet/servlet-name");
Element ele = (Element) doc.selectSingleNode("//servlet/servlet-name");
表达式的写法:
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
例如一个标签下有一个id属性且有值 id=2;
//元素名[@属性名='属性值']
//元素名[@id='2']
[code]public static void main(String[] args) throws DocumentException { //创建核心对象 SAXReader reader = new SAXReader(); //获取dom树 Document doc = reader.read("D:\\eclipsewk\\28\\day08\\xml\\web.xml"); //获取节点 //List<Element> list = doc.selectNodes("/web-app/servlet/servlet-name"); //Element ele = list.get(0); Element ele=(Element) doc.selectSingleNode("//servlet/servlet-name"); System.out.println(ele.getText()); }
- PBDOM解析XML 和xml基础知识
- HTML基础知识 - XML文档解析
- XML基础知识及四种解析方法
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
- Android入门学习笔记(一)|基础知识|文件数据存储读取|解析XML
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
- 使用Jquery解析Json基础知识
- FPGA基础知识11(FPGA异步复位同步释放解析)
- spring基础知识2:最小化spring xml
- 使用Jquery解析Json基础知识
- 交换机开发(四)—— ARP 基础知识解析
- [hadoop2.7.1]I/O之一步一步解析Text(基础知识及与String比较)
- Web 开发 基础知识解析
- mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析
- Linux操作系统基础解析之(七)——Bash(Shell)基础知识(4)
- xml基础知识(2)
- RAID技术基础知识解析
- XML的基础和DOCTYPE字段的解析
- 传智播客——javaWEB开发基础知识
- 【Android基础知识】网络操作:Json生成与解析