什么是XML

  XML

1. XML

1.1 什么是XML

XML(Extensible Markup Language)可扩展标记语言,被设计用来传输和存储数据。XML是独立于软件和硬件的信息传输工具。XML标签可以由用户自定义。

1.2 XML文档实例

<?xml version="1.0" encoding="UTF-8"?>

<books>

  <book category="小说">

    <name>解忧杂货店</name>

    <author>东野圭吾</author>

    <price>27.3</price>

  </book>

  <book category="小说">

    <name>在路上</name>

    <author>杰克·凯鲁亚克</author>

    <price>22.4</price>

  </book>

</books>

1.3 XML文档基本语法

1.3.1 XML声明

声明部分需要放在文档的第一行,以<?>开始<?>结束。version代表XML文档的版本,必须的属性,encoding是指使用的字符编码格式。

例:

<?xml version="1.0" encoding="UTF-8"?>

1.3.2 XML元素

XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。一个元素可以包含其他元素、文本、属性、或者混合以上所有元素。

 

 

1.3.3 XML属性

属性通常提供不属于数据组成部分的信息。属性值必须被引号包围,单引号和双引号均可使用。

例:

<book category="小说">

1.3.4 XML语法

1)命名规则

  a).名称可以包含字母、数字以及其他的字符

  b).名称不能以数字或者标点符号开始

  c).名称不能以字母xml(或者XMLxml等等)开始

  d).名称不能包含空格

2XML文档必须有一个根元素

3XML元素都必须有一个关闭标签

4XML元素必须被正确的嵌套

5XML标签对大小写敏感

例:

下面两个标签不一样

    <author>杰克·凯鲁亚克</author>

    <Author>杰克·凯鲁亚克</Author>

1.3.5 CDATA部分

格式:<![CDATA[文本内容]]>

XML中某一段内容想作为普通信息看待,但是其中又出现了大量的XML敏感字符时,此时可以使用CDATA区段来解决。CDATA区段中的文本会被解析器忽略。CDATA段中不能出现”]]>”

2. XML解析

2.1 DOM解析

DOMDocument Object Model)可描述XML文档的结构:是W3C组织推荐的处理XML的一种方式。DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系解析成一个个Node对象(节点)。

优点:把xml文件在内存中构造成树形结构,可以遍历和修改节点

缺点:如果文件比较大,内存有压力,解析的时间会比较长

 

 

 

2.2 SAX解析

SAXSimple API for XML:是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。逐行扫描文档,一边扫描一边解析。SAX可以在解析文档的任何时刻停止解析。

优点:解析可以立即开始,速度快,没有内存压力

缺点:不能对节点做修改

2.3 dom4j常用API

常用API

1) org.dom4j.io.SAXReader

        read(File file)  读取XML文件

2) org.dom4j.Document

   getRootElement()  得到根元素

   setRootElement(Element element)  设置根元素

3) org.dom4j.Element

   element(String name)  得到第一个匹配的字元素

   elements()   得到所有子元素

   getName()   得到当前元素的元素名字

   getText()     得到元素开始和结束标签之间的文本

   attributeValue(String attrName)    得到对应属性的值

4)  org.dom4j.Attribute

   getName()   得到属性名

   getValue()    得到属性值

2.4 dom4j读取XML文件

通过dom4j读取1.2中的XML文档实例

需要导入dom4jjar

 

public static void main(String[]args) throws DocumentException {

// 1.创建SAXReader对象

SAXReader saxReader = new SAXReader();

// 2.读取xml文件,得到document对象

Document document = saxReader.read(new File("src/book.xml"));

// 3.得到根元素,即books

Element rootEle = document.getRootElement();

// 4.得到根元素下的所有子元素,即books下的所有book

List<Element> bookEleList = rootEle.elements();

// 5.遍历所有book元素

for (Element bookEle : bookEleList) {

// 6.得到book元素下的所有子元素

List<Element> allEle = bookEle.elements();

// 7.遍历所有子元素

for (Element ele : allEle) {

String name = ele.getName();

String value = ele.getText();

System.out.println(name +":" + value);

}

}

}

2.5 dom4j创建XML文件

通过dom4j创建如下所示的xml文件

<?xml version="1.0" encoding="UTF-8"?>

 

<dataSource>

  <driverClassName>com.mysql.jdbc.Driver</driverClassName>

  <url>jdbc:mysql://localhost:3306/learn</url>

  <username>root</username>

  <password>123456</password>

</dataSource>

通过分析可知dataSource为根元素,其他元素均为dataSource的根元素

实例代码

@Test

public void testWrite()throws IOException {

//1.创建根元素dataSource

Element rootElement = DocumentHelper.createElement("dataSource");

//2.生成document对象 

Document document = DocumentHelper.createDocument(rootElement);

//3.dataSource元素下添加其他元素

rootElement.addElement("driverClassName").addText("com.mysql.jdbc.Driver");

rootElement.addElement("url").addText("jdbc:mysql://localhost:3306/zxlearn");

rootElement.addElement("username").addText("root");

rootElement.addElement("password").addText("123456");

//4.设置输出格式

//true表示换行

OutputFormat format = new OutputFormat("  ",true);

//format.setEncoding("UTF-8");

//5.通过XMLWriterdoucument输出成文件

XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dataSource.xml"),format);

xmlWriter.write(document);

xmlWriter.close();

}

 

3. DTD文档(了解)

3.1 什么是DTD文档

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

4. XML Schema(了解)

4.1 什么是XML Schema

XML Schema是新的XMl文档约束,可描述XML文档的结构,比DTD强大很多,是替代者。本身也是XML文档,但Schema文档的扩展名xsd

4.2 XSD文档实例

bookSchema.xsd文件

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.example.org/bookSchema" elementFormDefault="qualified">

<xs:element name="books">

<xs:complexType>

<xs:sequence maxOccurs="unbounded">

<xs:element name="book">

<xs:complexType mixed="true">

<xs:all>

<xs:element name="name" type="xs:string" />

<xs:element name="author" type="xs:string" />

<xs:element name="price" type="xs:string" />

</xs:all>

<xs:attribute name="category" type="xs:string"/>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

 

book.xml引用bookSchema.xsd文件

<?xml version="1.0" encoding="UTF-8"?>

<books xmlns="http://www.example.org/bookSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.example.org/bookSchema bookSchema.xsd">

<book category="小说">

<name>解忧杂货店</name>

<author>东野圭吾</author>

<price>27.3</price>

</book>

<book category="小说">

<name>在路上</name>

<author>杰克·凯鲁亚克</author>

<price>22.4</price>

</book>

</books>

4.3 命名空间

XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。使用名称空间是为了处理元素和属性的名称冲突问题。

 

1). 默认命名空间:<xxx xmlns=”命名空间”>   使用时<标签>

例:上面的book.xml使用了默认的命名空间

<books xmlns=”http://www.example.org/bookSchema”>

后面可以直接使用bookSchema.xsd中规定的标签

 

2). 显式命名空间:<xxx xmlns:别名=””>  使用时<别名:标签>

5. XPATH

5.1 路径表达式

 

XPath 是一门在 XML文档中查找信息的语言。XPath可用来在XML 文档中对元素和属性进行遍历。由于我们单纯使用dom定位节点时,大部分时间需要一层一层的处理,如果有了xPath,我们定位我们的节点将变得很轻松。 他可以根据路径,属性,甚至是条件进行节点的检索。

路径表达式语法:

斜杠(/)作为路径内部的分割符。

同一个节点有绝对路径和相对路径两种写法:

绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...

相对路径(relative path),比如step/step, 也就是不使用"/"起首。

"."表示当前节点。

".."表示当前节点的父节点

nodename(节点名称):表示选择该节点的所有子节点

"/":表示选择根节点

"//":表示选择任意位置的某个节点

"@":表示选择某个属性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值