0
点赞
收藏
分享

微信扫一扫

XML语言


XML

  • ​​1.XML简介​​
  • ​​3.XML语法​​
  • ​​3.1 文档说明​​
  • ​​3.2、xml注释​​
  • ​​3.3、元素(标签)​​
  • ​​1)什么是xml元素​​
  • ​​2)XML命名规则​​
  • ​​3) xml中的元素(标签)也分成单标签和双标签:​​
  • ​​3.4、xml属性​​
  • ​​1)属性必须用引号引起了,不引会报错​​
  • ​​3.5 语法规则​​
  • ​​3.5.1)所有XML元素都需有 关闭标签(也就是闭合)​​
  • ​​3.5.2)XML对大小写敏感​​
  • ​​3.5.3)XML标签必须正确的嵌套​​
  • ​​3.5.4)XML必须有根元素​​
  • ​​3.5.5)XML的属性值须加引号​​
  • ​​3.5.6)XML中的特殊字符​​
  • ​​3.5.7)文本区域(CDATA区)​​
  • ​​2、xml解析技术介绍​​
  • ​​3、dom4j解析技术​​
  • ​​3.1、Dom4j类库的使用​​
  • ​​3.3、dom4j编程步骤:​​
  • ​​3.4、获取document对象​​
  • ​​books.xml​​
  • ​​class Book​​
  • ​​class Dom4jTest​​

1.XML简介

  • 什么是xml?合
    xml是可扩展的标记性语言。
  • xml的作用?
    xml的主要作用有:
    1、用来保存数据,而且这些数据具有自我描述性
    2、它还可以做为项目或者模块的配置文件
    3、还可以做为网络传输数据的格式(现在JSON为主)。
  • XML语言_标签名

3.XML语法

3.1 文档说明

第一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--
<?xml version="1.0" encoding="UTF-8"?>
以上就是xml的声明
version="1.0" version表示xml的版本

encoding="UTF-8" encoding表示xml本身的编码


-->

<books> <!--books 表示多个图书信息-->
<book sn="SN121039480"> <!--book 表示一个图书信息 sn表示图书序列号-->
<name>时间简史</name> <!--name 标签表示图书书名-->
<author>霍金</author> <!--author 表示作者-->
<price>75</price> <!--price 表示图书价格-->
</book>

<book sn="SN121039480"> <!--book 表示一个图书信息 sn表示图书序列号-->
<name>java从入门到放弃</name> <!--name 标签表示图书书名-->
<author>沙老师</author> <!--author 表示作者-->
<price>9.9</price> <!--price 表示图书价格-->
</book>

</books>

3.2、xml注释

XML 与 HTML 注释一样:<!–html 注释 -->

3.3、元素(标签)

咱们先回忆一下:
html标签:
格式:<标签名>封装的数据</标签名>
单标签:<标签名/><br/>换行<hr/>水平线
双标签<标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合,html中不报错。但我们要养成良好的书写习惯。闭合)

1)什么是xml元素

XML语言_java_02

2)XML命名规则

XML元素必须遵循以下命名规则。

  • 2.1)名称可以含字母、数字以及其他的字符
    例如:

<book id="SN213412341"><!-描述一本书-->
<author>班导</author><!--描述书的作者信息一 <name>java编程思想</name><!--书名-->
<price>9.9</price><!--价格-->
</book>

  • 2.2)名称不能以数字或者标点符号开始
  • 2.3)名称不能以字符“xml(或者XML、Xml)开始
  • 2.4)名称不能包含空格
  • 2.5)用任何名称,没有保留的字词。

3) xml中的元素(标签)也分成单标签和双标签:

单标签
格式:<标签名 属性=“值” 属性=“值” ……/>
双标签
格式:<标签名 属性=“值” 属性=“值” ……>文本数据或子标签</标签名>

3.4、xml属性

xml的标签属性和html的标签属性是非常类似的, 属性可以提供元素的额外信息

在标签上可以书写属性:
一个标签上可以书写多个属性。 每个属性的值必须使用引号引起来。
的规则和标签的书写规则一致。

1)属性必须用引号引起了,不引会报错

3.5 语法规则

3.5.1)所有XML元素都需有 关闭标签(也就是闭合)

3.5.2)XML对大小写敏感

3.5.3)XML标签必须正确的嵌套

3.5.4)XML必须有根元素

根元素就是顶级元素,

没有父标签的元素,叫顶级元素。

根元素是没有父标签的顶级元素,而且是唯一一个才行。

XML语言_xml文件_03

3.5.5)XML的属性值须加引号

3.5.6)XML中的特殊字符

XML语言_标签名_04

3.5.7)文本区域(CDATA区)

CDATA语法可以告诉xml解析器,我CDATA里的文本内容只是纯文本,不需要xml语法解析
CDATA 格式

<![CDATA[这里可以把你输入的字符原样显示,不会解析xml ]]>

<![CDATA[
沙老师<<<
]]>]

2、xml解析技术介绍

xml可扩展的标记语言。

不管htm文件还是则文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。

XML语言_java_05


早期JDK为我们提供了两种xml解析技术Dom和sax简介(已经过时,但我们需要知道这两种技术)

dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。 Java对dom技术解析标记也做了实现。

sun公司在JDK5版本对dom解析技术进行升级:SAX(Simple API for XIL)
SAX解析,它跟W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。 它是一行一行的读取xm|文件进行解析的。不会创建大量的dom对象。
所以它在解析xm的时候,在内存的使用上。和性能上。都优于Dom解析。

第三方的解析:
jdom在dom基础上进行了封装,
dom4j 又对jdom进行了封装。
pull主要用在Android手机开发,是在跟sax非常类似都是事件机制解析xml文件。

这个Dom4j它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件。

3、dom4j解析技术

由于dom4j它不是sun公司的技术,而属于第三方公司的技术,我们需要使用dom4j就需要到dom4j官网下载dom4j 包。

3.1、Dom4j类库的使用

Java中读写XML文件时,依赖于dom4j,dom4j的jar包下载地址为:​​https://dom4j.github.io/#​​,下载好dom4j-1.6.1.jar文件后|:

1、在要用工程中新建文件夹,命名lib;

2、将dom4j-1.6.1.jar复制进lib中;

3、选中lib中的dom4j-1.6.1.jar,右击 选择Add as Library;
导入后即可

XML语言_java_06

XML语言_java_07

3.3、dom4j编程步骤:

第一步:先加载xml文件创建Document对象
第二步:通过Document对象拿到根元素对象
第三步,通过根元素,elelemt(标签名);可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象 第四步,找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上

3.4、获取document对象

books.xml

<?xml  version="1.0" encoding="UTF-8"?>  <books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>班主任</author> </book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.99</price>
<author>班长</author>
</book>
</books>

class Book

package com.atguigu.pojo;

import java.math.BigDecimal;

public class Book {
private String sn;
private String name;
private double price;
private String author;

public Book() {
}

public Book(String sn, String name, double price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}

public String getSn() {
return sn;
}

public void setSn(String sn) {
this.sn = sn;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}

}

class Dom4jTest

package com.atguigu.pojo;


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

import java.util.List;

public class Dom4jTest {

@Test
public void test1() throws Exception {
//创建一个 SAXReader 输入流,去读取xml文件,创建Document对象
SAXReader saxReader=new SAXReader();
try {
Document document = saxReader.read("src/books.xml");
System.out.println(document);
} catch (Exception e){
e.printStackTrace();
}

}

/**
* 读取books.xml文件生成Book类
*/
@Test
public void test2() throws Exception{
//1 读取books.xml文件
SAXReader reader=new SAXReader();
//在JUnity测试中,相对路径是从模块名开始算的
Document document = reader.read("src/books.xml");
//2 通过Document对象获取根元素
Element rootElement = document.getRootElement();
System.out.println(rootElement);
//3 通过根元素获取book标签对象
//elements和element都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
//4 遍历,处理每个book标签转换为Book类
for (Element book:books){
//asXML()把标签对象转换为标签字符串
// System.out.println(book.asXML());
Element nameElement = book.element("name");
//getText()可以获取标签中的文本内容
String nameText = nameElement.getText();
//elementText()直接获取指定标签名中的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");

String snValue=book.attributeValue("sn");

System.out.println(new Book(snValue,nameText,Double.parseDouble(priceText),authorText));
}

}
}


举报

相关推荐

0 条评论