目录
XML
1.XML基本概述
- XML最初是用来给前后端传输数据使用的,现在主要用于作为java的配置文件
- XML的语法与HTML的语法十分相似,但要注意的一点是:XML没有预制的标签,所有标签都是用户自定义的
2.XML常用基本语法
- 创建XML文件时一定要在文件行首使用定义语句<? XML version="1.0" encoding="UTF-8" ?>
- XML的标签必须要有开标签和关标签(类比HTML语法)如:开标签: <books> 关标签:</books>
- XML的标签对大小写敏感,如<book>和<Book>
- XML文件必须要有根标签 ,类比html中的<html></html>标签
- XML属性值必须要有引号 ,与html语法相同
3.XML的解析
常见解析方式有:dom ,sax ,pull ,dom4j
dom4j为框架常用的解析方式,这里就只对dom4j的使用做说明
XML示例文件
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book>
<name>如何成为世界首富</name>
<price>9.99</price>
<author>尼古拉斯凯奇</author>
</book>
<book>
<name>校花的贴身高手</name>
<price>8888.88</price>
<author>唐家十少</author>
</book>
</books>
dom4j使用
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import javax.swing.plaf.synth.SynthOptionPaneUI;
import java.io.InputStream;
import java.util.List;
/**
* author: -别看了-
* 2022/03/19
*/
public class mainTest {
@Test
public void test() throws DocumentException {
//读取配置文件
InputStream is = getClass().getResourceAsStream("/myConfig01.xml");
//创建SAXReader对象用于读取输入流
SAXReader saxReader = new SAXReader();
//读取输入流会返回一个document对象
Document doc = saxReader.read(is);
//获取根标签
Element rootElement = doc.getRootElement();
//获取指定的子标签
List<Element> elements = rootElement.elements("book");
elements.forEach ( bookEle -> {
//获取子标签属性值
String bookID = bookEle.attributeValue("bid");
//获取子标签的子标签
Element nameEle = bookEle.element("name");
Element priceEle = bookEle.element("price");
Element authorEle = bookEle.element("author");
//获取标签文本内容
String name = nameEle.getText();
String price = priceEle.getText();
String author = authorEle.getText();
System.out.println("name: " + name +" price: "+price+" author: "+author);
});
}
}
XML约束
常见约束有 : dtd约束和xsd约束
这里详细讲解dtd约束
创建一个xmlDTD.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book+)> <!--这里设置了标签books可以有一个或多个book子标签,至少一个-->
<!ELEMENT book (name,price,author)> <!--这里设置了book里可以有name,price,author子标签-->
<!ELEMENT name (#PCDATA)> <!--这里设置了name标签的文本为普通文本-->
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!--
1. 这里的ATTLIST指的是属性列表,
2. 设置了books的属性可以有bid属性,并且规定了bid属性是ID属性(即具有唯一性)
3. #REQUIRED规定了bid是必须要填的属性
-->
<!ATTLIST book bid ID #REQUTRED>
XML引入(Idea)
点击File-->Settings --> 点击Language&Frameworks --> Schemas and DTDs
操作成功后,回到刚刚编辑的XML文件
<!DOCTYPE books>规定了当前xml文件的根标签为<books></books>
SYSTEM意为在内网中该dtd约束通用(也可以选择PUBLIC模式,意为该dtd约束为公共适用的),以url引入dtd文件,url为刚刚输入的url。
*XML文件要按照dtd文件约束来输入,不然会报错,自己回去可以改一下bid或者添加dtd定义外的子标签试一试。