JavaWeb-01-XML

目录

1.XML概念及基本语法

1.1XML概念

1.2XML作用

2.XML语法

3.XML的解析

3.1什么是XML文档解析?

3.2解析XML方式

3.3dom4j解析XML案例

4.XML和JSON区别?

5.XML的约束

5.1DTD约束

5.2 Schema约束


1.XML概念及基本语法

1.1XML概念

XML为可扩展标记语言,全称为Extensible Markup Language。

XML语法上和HTML比较相似,但HTML中的标签是固定的,而XML的标签是可以由用户自定义的。

1.2XML作用

【1】数据传输

【2】配置文件

2.XML语法

[1]创建普通文本文件,后缀名为xml
[2]声明

语法:<?xml version="1.0" encoding="UTF-8"?>
解析:
a、文档声明必须以<?xml开头,必须以?>结尾
b、文档声明必须在文档中的0行0列
c、文档声明的3个属性
   versioin属性:指定XML文档版本.必须属性。
   encoding属性:指定当前文档的编码。可选属性,默认值是utf-8;
   standalone属性:指定文档独立性。可选属性,默认值为yes,表示当前文档是独立文档。如果为no表示当前文档不是独立的文档,会依赖外部文件。
[3]定义Person.xml

<?xml version="1.0" encoding="UTF-8"?>
<person>
  <p>
    <id>A0001</id>
    <name>zs</name>
    <age>23</age>
    <sex>男</sex>
  </p>
  <p>
    <id>A0002</id>
    <name>ls</name>
    <age>23</age>
    <sex>男</sex>
  </p>
  <p>
    <id>A0003</id>
    <name>ww</name>
    <age>23</age>
    <sex>男</sex>
  </p>
</person>
<?xml version="1.0" encoding="UTF-8"?>
<person sex="男">
  <p>
    <id>A0001</id>
    <name>zs</name>
    <age>23</age>
  </p>
  <p>
    <id>A0002</id>
    <name>ls</name>
    <age>23</age>
  </p>
  <p>
    <id>A0003</id>
    <name>ww</name>
    <age>23</age>
  </p>
</person>

a、普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>你好</hello>
b、元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a></b>
c、空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合.例如:<c/>
       <br/> <input/><hr/>
d、属性:
   属性是元素的一部分,它必须出现在元素的开始标签中
   属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
   一个元素可以有0~N个属性,但一个元素中不能出现同名属性
   属性名不能使用空格、冒号等特殊字符,且必须以字母开头
e、元素命名规范:
   区分大小写
   不能使用空格,不能使用冒号:
   不建议以XML、xml、Xml开头
   良好的XML文档,必须有一个根元素。
f、注释
   <!-- 注释掉的内容 -->
g、转义字符
   <p>5&lt;3</p>
   &lt; 对应<小于号
   &gt;对应>大于号
   &amp; 对应&和
   &apos; 对应' 单引号
   &quot; 对应" 双引号
解析:xml中的转义字符与html中的使用方式一样,因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符

3.XML的解析

3.1什么是XML文档解析?

将xml文档中的元素、属性、文本内容进行拆解,我们获得这些组件的过程就叫做xml的解析工作。

3.2解析XML方式

[1]sax解析:逐行解析,只能查询。

[2]dom解析:一次性将文档加载到内存中,增删改查的操作都可以。

3.3dom4j解析XML案例

dom4j 必须使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的根元素,然后就可以继续操作了。

具体步骤:

a.导入jar包
b.创建一个核心对象 SAXReader reader=new SAXReader();
c.将xml文档加载到内存中形成一棵树Document doc=reader.read(文件)
d.获取根节点 Element root=doc.getRootElement();
e.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
  获取所有的子元素List<Element> list=root.elements()

import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test1 {
	public static void main(String[] args) throws Exception {
		/*
		 * 创建出来一个reader对象 阅读器
		 * 该阅读器用来读xml文档
		 */
		SAXReader reader = new SAXReader();
		
		/*
		 * 此时doc对象代表的就是person.xml
		 * 解析doc对象就相当于是解析person.xml了
		 * 所以我们接下来就是对于doc对象的操作
		 */
		Document doc = reader.read("src/com/example/xml/person.xml");
		
		//取得跟元素  Person
		Element root = doc.getRootElement();
		//查看元素的名字
		/*String name = root.getName();
		System.out.println(name);*/
		
		//通过根元素取得一级子元素 p1 p2 p3
		//eList p1 p2 p3
		List<Element> eList = root.elements();
		for(Element e:eList){
			
			/*String ename = e.getName();
			System.out.println(ename);*/
			
			//通过一级子元素取得里面的二级子元素 每一个一级子元素下的id name age
			List<Element> eeList = e.elements();
			
			for(Element ee:eeList){
				
				/*String eename = ee.getName();
				System.out.println(eename);*/
				
				//取得元素下的文本
				String text = ee.getText();
				System.out.println(text);
				
			}
			System.out.println("--------------");
		}
	}
}

获取指定标签

导入包:jaxen-1.1-beta-6.jar

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Test2 {
	public static void main(String[] args) throws Exception {
		/*
		 * 创建出来一个reader对象 阅读器
		 * 该阅读器用来读xml文档
		 */
		SAXReader reader = new SAXReader();
		
		/*
		 * 此时doc对象代表的就是person.xml
		 * 解析doc对象就相当于是解析person.xml了
		 * 所以我们接下来就是对于doc对象的操作
		 */
		Document doc = reader.read("src/com/example/xml/person.xml");
		
		//取得跟元素  Person
		Element root = doc.getRootElement();
		
		/*
		 * Node接口是Element接口的父接口
		 * 
		 * 我们要用的是Element接口
		 * 但是我们现在有的是Node接口
		 * 
		 * 我们要用的是儿子
		 * 但是我们现在有的是父亲
		 * 
		 * 是一个父亲转儿子的过程
		 * 
		 * 父亲:上级
		 * 儿子:下级
		 * 
		 */
		Element e = (Element) root.selectSingleNode("//p1/name");
		
		System.out.println(e.getText());
	}
}

以上形式为xpath的形式,xpath可以实现快速的找到指定的xml元素的功能

注意:xpath的形式是传统dom4j形式的扩展形式,不能独立存在
jaxen-1.1-beta-6.jar(支持xpath的jar包)不能独立存在,必须依附于dom4j.jar才能使用

4.XML和JSON区别?

XML和JSON都可以完成不同系统之间数据交换。
XML体积较大,解析难度较大,所以在现代开发中通常采用JSON进行数据交换,因为JSON体积小,解析简单,而XML通常充当系统当中的配置文件

5.XML的约束

5.1DTD约束

DTD(Document Type Definition),文档类型定义,用来约束xml文档。规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等。

<?xml version="1.0" encoding="UTF-8"?>
<!--
	使用DTD文档前,必须将以下代码导入到目标文件:
	<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>

<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>

<!ATTLIST web-app version CDATA #IMPLIED>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app>
	<servlet>
		<servlet-name></servlet-name>
		<servlet-class></servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name></servlet-name>
		<url-pattern></url-pattern>
	</servlet-mapping>
</web-app>

5.2 Schema约束

同DTD约束一样,也是用来约束xml文档用的技术。
从功能上讲,Schema约束要比DTD强大很多,是DTD替代者
Schema本身也是xml文档,但Schema文档的扩展名为xsd,而不是xml。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5" 
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
			version="2.5">
	
	<servlet>
		<servlet-name></servlet-name>
		<servlet-class></servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name></servlet-name>
		<url-pattern></url-pattern>
	</servlet-mapping>
	
	<servlet>
		<servlet-name></servlet-name>
		<servlet-class></servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name></servlet-name>
		<url-pattern></url-pattern>
	</servlet-mapping>
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值