一、什么是 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();
}
}
}