JavaWeb-XML基础介绍与dom4j 解析

文章学习内容借鉴链接:http://www.w3school.com.cn/xml/xml_intro.asp

一、什么是 XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性

二、XML 与 HTML 的主要差异

1、XML 不是 HTML 的替代。
2、XML 和 HTML 为不同的目的而设计:
3、XML 被设计为传输和存储数据,其焦点是数据的内容。
4、HTML 被设计用来显示数据,其焦点是数据的外观。
5、HTML 旨在显示信息,而 XML 旨在传输信息。

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。


三、DTD约束 和 Schema约束

什么是DTD?

      DTD(Document Type Definition),文档类型定义,用来约束XML文档,规定XML文档中元素的名称,子元素的名称及顺序、元素的属性等。通常情况下,我们使用框架提供的DTD约束文档,编写对应的XML文档,常见框架使用DTD约束有:Struts2、Hibernate。

什么是Schema约束?

     Schema 是新的XML文档约束;它要比DTD强大很多,是DTD的替代者;本身也是XML文档,但Schema文档的扩展名为xsd,功能更强大,数据类型更完善,支持名称空间。常见框架使用Schema的有:Spring。


四、XML 文档可对 DTD 或 XML Schema 进行引用

XML 文档:
<?xml version="1.0"?>
<note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>

DTD 文件(对上面 XML 文档的元素进行了定义):

<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
第 1 行定义 XML 文档元素有四个子元素:"to, from, heading, body"。

第 2-5 行定义了 to, from, heading, body 元素的类型是 "#PCDATA"。

对 DTD 的引用:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://www.Study.com/dtd/note.dtd">
<note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>

XML Schema(定义了上面那个 XML 文档的元素):
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="to" type="xs:string"/>
	<xs:element name="from" type="xs:string"/>
	<xs:element name="heading" type="xs:string"/>
	<xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

对 XML Schema 的引用:

<?xml version="1.0"?>
<note
    xmlns="http://www.w3.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.Study.com. note.xsd">

    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>

XML 命名空间提供避免元素命名冲突的方法。

命名冲突:在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。


五、dom4j 解析

       XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。
  XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。

       开发中比较常见的解析方式有三种,如下:



解析器:就是根据不同的解析方式提供的具体实现,有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。


API使用:

如果需要使用dom4j,必须导入jar包:


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


代码:

package cn.itheima.xml.dom4j;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestDom4j {
	@Test
	public void testReadWebXML() {
		try {
			// 1.获取解析器
			SAXReader saxReader = new SAXReader();
			// 2.获得document文档对象
			Document doc = saxReader.read("src/cn/itheima/xml/schema/web.xml");
			// 3.获取根元素
			Element rootElement = doc.getRootElement();
			// System.out.println(rootElement.getName());//获取根元素的名称
			// System.out.println(rootElement.attributeValue("version"));//获取根元素中的属性值
			// 4.获取根元素下的子元素
			List<Element> childElements = rootElement.elements();
			// 5.遍历子元素
			for (Element element : childElements) {
				//6.判断元素名称为servlet的元素
				if ("servlet".equals(element.getName())) {
					//7.获取servlet-name元素
					Element servletName = element.element("servlet-name");
					//8.获取servlet-class元素
					Element servletClass = element.element("servlet-class");
					System.out.println(servletName.getText());
					System.out.println(servletClass.getText());
				}
			}

		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值