寒假不能大溜特溜,必须得狠狠地学😤😤
1、xml
xml是可扩展的标记性语言。
1.1、xml的作用
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件。
3、还可以做为网络传输数据的格式。
1.2、什么是xml元素
元素是指从开始标签到结束标签的内容。可以当标签理解。
例如下面的<name>书本1</name>
就是。
<?xml version="1.0" encoding="utf-8" ?>
<!--上面是文本申明-->
<books>
<book sn="SN123">
<name>书本1</name>
<author>我不好说</author>
</book>
<book sn="SN124">
<name><br></name>
<author>上面的特殊字符用的很秒</author>
</book>
<book sn="SN125" name="这样写成单标签也行"/>
</books>
1.3、xml元素命名规则
● 名称可以含字母、数字以及其他的字符 (甚至中文都行🐶头)
● 名称不能以数字或者标点符号开始
● 名称不能以字符“xml" (或者XML、Xml)开始
● 名称不能包含空格
1.4、xml 文档必须有根元素
根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一个才行。下面我多了一个student元素 ,它直接给我报错。
1.5、文本区域(CDATE)
格式 <![CDATE[输入你想输入的内容]]>
问题: 我想要<<<<<<<<<<< 但是不想一直写 <
CDATA语法可以告诉xml解析器,我CDATE里的文本内容,只是纯文本,不需要xml语法解析。
<author><![CDATA[<<<<<]]>上面的特殊字符用的很秒</author>
2、dom4j
前面我们写xml文件,非常的开心,但我们需要用xml的内容该怎么办捏,这时候就需要xml解析技术。
2.1、配置
我们广快(最近看红警08看多了)溜到他的官网
下载dom4j-1.6.1和 我特异损了一个和视频同步版本。
很快嗷,我们打开文件夹一看
然后我们溜一溜docs 看1看index 然后quick start 了解下
那么就让我们快速的来写一些东西来试试看把
现在,要这个将jar包添加到类路径
2.2、解释体验
马上创建一个类来开溜,这时候肯定会有家人们会问了,这个SAX是什么东西,其实他是Simpel API for xml 基于事件驱动,读取一行解析一行,不能增删,只能查询。
我们通过创建一个SAXReader输入流去读取xml文件,会获得一个document对象。
2.3、获取根元素
document 对象 有一个重要的方法叫 getRootElement() 可以获取到根元素,拿到之后可以进行各种play🥵
2.4、把标签对象转为标签字符串
asXML()
2.5、获取子元素
有两种方法element 和 elements()。
下图,我们拿到根元素对象后,很快嗷,elements()返回一个Elment的集合,就拿到了他的子元素集合,然后狠狠的滴遍历🥵🥵🥵通过asXML(),输出来康康。
2.6、获取标签中的文本内容
间接取法
获取子元素,使用getText()方法
你的智力会被侮辱,建议别看…
这时候,聪明的你,肯定会说,欸欸欸,怎么给👴来了一个空指针异常啊,我一看xml文件,嗷↑↓,原来是
我这第三本书啊,直接把name写成标签属性咯
直接取法
elementText()
甚至不会出现间接获取的那种错误,找不到就输出null,所以我强烈建议大家使用第二种方法😄
现在刚刚幸幸苦苦写的book类,来使用下
3、所用到的代码
book类
package com.flzj.pojo;
import java.math.BigDecimal;
public class Book {
private String sn;
private String name;
private BigDecimal price;
private String author;
@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
public Book(String sn, String name, String author) {
this.sn = sn;
this.name = name;
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 BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
xml代码
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book sn="SN123">
<name>书本1</name>
<author>我不好说</author>
</book>
<book sn="SN124">
<name><br></name>
<author><![CDATA[<<<<<]]>上面的特殊字符用的很秒</author>
</book>
<book sn="SN125" name="这样写成单标签也行"/>
</books>
体验解释的java代码
package com.flzj.pojo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
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();
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}
@Test
public void test2() throws DocumentException {
//读取books.xml 文件
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
//通过document对象获取<!!!根!!!>元素
Element rootElement = document.getRootElement();
//通过根元素获取book标签对象
//element()和elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
//遍历开溜
for(Element book : books){
String sn = book.elementText("sn");
String name = book.elementText("name");
String author = book.elementText("author");
System.out.println(new Book(sn,name,author));
}
}
}
4、idea识别xml
👴这里有个问题,👴的xml文件和file文件图标一样,写起来和txt文本一样麻瓜捏,该怎么改捏
这时候我们只要去File | Settings | Editor | File Types
这时候,哈哈哈👴的xml变聪明了,你学会了吗,来试试看