廣州專(zhuān)業(yè)網(wǎng)站制作種子搜索神器網(wǎng)頁(yè)版
目錄
一、XML(可拓展標(biāo)記語(yǔ)言)
1.學(xué)習(xí)網(wǎng)站:
2.作用
3.XML標(biāo)簽
4.XML語(yǔ)法
5.解析XML
(1)常見(jiàn)解析思想DOM
6.常見(jiàn)的解析工具
7.DOM4j的使用
8.文檔約束
(1)概述
(2)分類(lèi)
(3)DTD約束
(4)引入DTD約束
(5)DTD語(yǔ)法
①定義元素
②定義屬性
(6)schema約束
①定義元素
②定義屬性
(7)引入schema約束
(8)schema和DTD約束的區(qū)別
一、XML(可拓展標(biāo)記語(yǔ)言)
1.學(xué)習(xí)網(wǎng)站:
https://www.w3schoo1.com.cn
-
標(biāo)記語(yǔ)言:通過(guò)標(biāo)簽來(lái)描述數(shù)據(jù)的一門(mén)語(yǔ)言(標(biāo)簽有時(shí)我們也將其稱(chēng)之為元素)
-
可擴(kuò)展:標(biāo)簽的名字是可以自定義的
2.作用
-
用于進(jìn)行存儲(chǔ)數(shù)據(jù)和傳輸數(shù)據(jù)
-
作為軟件的配置文件
3.XML標(biāo)簽
-
標(biāo)簽由一對(duì)尖括號(hào)和合法標(biāo)識(shí)符組成 < user >
-
標(biāo)簽必須成對(duì)出現(xiàn)< user >< user/>
-
特殊的標(biāo)簽可以不成對(duì),但是必須有結(jié)束標(biāo)記< user/ >
-
標(biāo)簽中可以定義屬性,屬性和標(biāo)簽名空格隔開(kāi)屬性值必須用引號(hào)(單/雙)引起來(lái)< user id = "100"/>
-
標(biāo)簽需要正確的嵌套
4.XML語(yǔ)法
-
后綴名為.xml
-
文檔聲明必須是第一行第一列
<?xmlversion="1.0”encoding="UTF-8" standalone= “yes”?> 其中 version屬性必須存在 encoding屬性不是必須的,作用:打開(kāi)當(dāng)前xml文件的時(shí)候應(yīng)該是使用什么字符編碼表(默認(rèn)都是UTF-8) standalone屬性不是必須的,作用:描述XML文件是否依賴(lài)其他的xml文件,取值為yes/no
-
必須存在根標(biāo)簽
-
XML文件中可以定義注釋信息
-
XML文件中可以存在以下特殊字符
<-----------------小于 >-----------------大于 &----------------和號(hào)(&) '---------------單引號(hào) "---------------引號(hào)
-
XML可以存在CDATA區(qū)
<![CDATA[ ...內(nèi)容...]]>
5.解析XML
(1)常見(jiàn)解析思想DOM
-
DOM(DocumentObject Model)文檔對(duì)象模型:
就是把文檔的各個(gè)組成部分看做成對(duì)應(yīng)的對(duì)象,會(huì)把xmI文件全部加載到內(nèi)存在內(nèi)存中形成一個(gè)樹(shù)形結(jié)構(gòu),再獲取對(duì)應(yīng)的值
其中DOM對(duì)象主要有以下部分
-
Document對(duì)象:整個(gè)xml文檔
-
Element對(duì)象:所有標(biāo)簽
-
Attribute對(duì)象:所有屬性
-
Text對(duì)象:所有文本內(nèi)容
其中Element,Attribute,Text有一個(gè)共同的父類(lèi):Node對(duì)象
6.常見(jiàn)的解析工具
-
JAXP:SUN公司提供的一套XML的解析的API
-
JDOM:開(kāi)源組織提供了一套XML的解析的API-jdom
-
DOM4J:開(kāi)源組織提供了一套XML的解析的API-dom4j
-
pull :主要應(yīng)用在A(yíng)ndroid手機(jī)端解析XML
7.DOM4j的使用
首先下載jar包
xml文件
<?xml version="1.0" encoding="utf-8" ?>
<books><book id="1"><name>語(yǔ)文</name><versions>人教版</versions></book><book id="2"><name>數(shù)學(xué)</name><versions>人教版</versions></book><book id="3"><name>數(shù)學(xué)</name><versions>蘇教版</versions></book><user id="1"><name>小明</name><studentID>1235354</studentID></user>
</books>
需求:
-
解析這個(gè)xmI文件
-
將解析到的Book標(biāo)簽數(shù)據(jù)封裝到Book對(duì)象中并將其存儲(chǔ)到ArrayList集合中
-
遍歷集合
解析類(lèi):
public class Analysis {
?public Document parseUrl(String url) throws DocumentException {SAXReader reader = new SAXReader();return reader.read(url);}public Document parseUrl(File file) throws DocumentException {SAXReader reader = new SAXReader();return reader.read(file);}
?
}
Book類(lèi)
public class Book {private String name;private String version;private Long id;
?public Book() {}
?public Book(String name, String version, Long id) {this.name = name;this.version = version;this.id = id;}
?public String getName() {return name;}
?public void setName(String name) {this.name = name;}
?public String getVersion() {return version;}
?public void setVersion(String version) {this.version = version;}
?public Long getId() {return id;}
?public void setId(Long id) {this.id = id;}
?@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", version='" + version + '\'' +", id=" + id +'}';}
}
測(cè)試類(lèi)
public class Application {public static void main(String[] args) throws ?DocumentException {
?File file = new File("reflection\\src\\xml\\bookstores.xml");Analysis analysis = new Analysis();Document document = analysis.parseUrl(file);
?//獲取根標(biāo)簽Element rootElement = document.getRootElement();//通過(guò)根標(biāo)簽獲取book標(biāo)簽//無(wú)參elements()獲取所有子標(biāo)簽List<Element> elements = rootElement.elements();System.out.println(elements.size());elements.forEach(book -> {System.out.println(book.getName());});
?//有參elements(標(biāo)簽名)可以獲取所有的指定子標(biāo)簽List<Element> books = rootElement.elements("book");System.out.println(books.size());
?books.forEach(book -> {System.out.println("=====================================");//獲取屬性對(duì)應(yīng)的屬性值System.out.println(book.attribute("id").getValue());//獲取該標(biāo)簽下的子標(biāo)簽book.elements("name").forEach(name -> {//獲取標(biāo)簽體的內(nèi)容System.out.println(name.getText());});
?book.elements("version").forEach(v -> {//獲取標(biāo)簽體的內(nèi)容System.out.println(v.getText());});});System.out.println("------------------------------------");
?//準(zhǔn)備封裝ArrayList<Book> bookArrayList = new ArrayList<>();books.forEach(book -> {Book book1 = new Book(book.element("name").getText(),book.element("version").getText(),Long.valueOf(book.attribute("id").getValue()));System.out.println(book1);bookArrayList.add(book1);});//最后檢查"System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");bookArrayList.forEach(book -> System.out.println(book.toString()));
?
?
?}
}
8.文檔約束
(1)概述
用來(lái)限定xml文件中可使用的標(biāo)簽以及屬性
(2)分類(lèi)
-
DTD
-
schema
(3)DTD約束
-
創(chuàng)建一個(gè)文件,后綴名為.dtd
-
看xml文件中使用了哪些元素(<!ELEMENT>可以定義元素)
-
判斷元素是簡(jiǎn)單元素還是復(fù)雜元素
-
簡(jiǎn)單元素:沒(méi)有子元素
-
復(fù)雜元素:有子元素的
-
xml文件:下面的約束文檔的xml內(nèi)容
<?xml version="1.0" encoding="utf-8" ?>
<books><book id="1"><name>語(yǔ)文</name><versions>人教版</versions></book><book id="2"><name>數(shù)學(xué)</name><versions>人教版</versions></book><book id="3"><name>數(shù)學(xué)</name><versions>蘇教版</versions></book>
</books>
需要掌握:
-
能在xml文件中引入dtd約束文檔
-
能夠簡(jiǎn)單閱讀約束文檔
-
能根據(jù)約束文檔寫(xiě)xml文件
(4)引入DTD約束
方式一:引入本地dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行寫(xiě)入 <!DOCTYPE 根標(biāo)簽名字 SYSTEM(表示引入本地DTD) ‘DTD文件路徑’>-->
<!DOCTYPE books SYSTEM 'restrain.dtd'>
方式二:在xml文件內(nèi)部引入
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行寫(xiě)入 <!DOCTYPE 根標(biāo)簽名字 [](表示內(nèi)部引入dtd,[]內(nèi)寫(xiě)約束內(nèi)容)>-->
<!DOCTYPE books [] >
方式三:引入網(wǎng)絡(luò)dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行寫(xiě)入 <!DOCTYPE 根標(biāo)簽名字 PUBLIC(表示引入網(wǎng)絡(luò)DTD) “dtd文件名” “dtd文檔的url”>-->
<!DOCTYPE books PUBLIC “dtd文件名” “dtd文檔的url”>
(5)DTD語(yǔ)法
①定義元素
<!ELEMENT元素名 元素類(lèi)型>
-
簡(jiǎn)單元素
-
EMPTY:表示標(biāo)簽體為空
-
ANY:表示標(biāo)簽體可以為空也可以不為空
-
PCDATA:表示該元素的內(nèi)容部分為字符串
-
-
復(fù)雜元素
-
直接寫(xiě)子元素名稱(chēng)。
-
多個(gè)子元素可以使用”,“或者 ”|" 隔開(kāi);
-
” , ":表示定義子元素的順序
-
”|”: 表示子元素只能出現(xiàn)任意一個(gè)
-
"?“:零次或一次
-
” + ":一次或多次
-
" * ":零次或多次;
-
如果不寫(xiě)則表示出現(xiàn)一次
-
-
-
②定義屬性
<!ATTLIST 元素名稱(chēng) 屬性名稱(chēng) 屬性的類(lèi)型 屬性的約束>
-
屬性的類(lèi)型
-
CDATA類(lèi)型:普通的字符串
-
-
屬性的約束:
-
#REQUIRED:屬性是必須的
-
#IMPLIED:屬性不是必需的
-
#FIXED value:屬性值是固定的value值
-
DTD約束文件
<!--復(fù)雜元素-->
<!ELEMENT books (book+)>
<!ELEMENT book (name,version)>
<!--簡(jiǎn)單元素-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!--定義屬性-->
<!ATTLIST book id #PCDATA #IMPLIED>
(6)schema約束
①定義元素
-
創(chuàng)建一個(gè)文件,后綴名為.xsd
-
定義文檔聲明
-
schema文件的根標(biāo)簽為:< schema>
-
在< schema>中定義屬性:xmIns=XML Schema
-
在根標(biāo)簽中定義屬性:targetNamespace =唯一的url地址,用來(lái)指定當(dāng)前這個(gè)schema文件的名稱(chēng)空間
-
在根標(biāo)簽定義屬性:elementFormDefault="qualified,表示當(dāng)前schema文件是一個(gè)質(zhì)量良好的文件
-
通過(guò)element定義元素
-
判斷當(dāng)前元素是簡(jiǎn)單元素還是復(fù)雜元素
②定義屬性
屬性名 ? ? 屬性類(lèi)型 ? 屬性的約束【required(必須的),optional(可選的)】
<attribute name="id" type="string"use="required"></attribute>
?(7)引入schema約束
-
在根標(biāo)簽定義屬性:xmIns="http://www.w3.org/2001/XMLSchema-instance
-
通過(guò)xmIns引入約束文件的名稱(chēng)空間
-
給某一個(gè)xmins屬性添加一個(gè)標(biāo)識(shí),用于區(qū)分不同的名稱(chēng)空間,格式為:xmins:標(biāo)識(shí)=“名稱(chēng)空間地址”,標(biāo)識(shí)可以是任意的,但是一般取值都是xsi
-
通過(guò)xsi:schemaLocation指定名稱(chēng)空間所對(duì)應(yīng)的約束文件,路徑格式為:父 si:schemaLocation ="名稱(chēng)空間url 文件路徑“
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="www.book_schema.cn"xsi:shemaLocation="www.book_shema.cn book_shema.xad"
>
根據(jù)上面xml寫(xiě)一個(gè)xsd文件
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="www.book_schema.cn"elementFormDefault="qualified">
?
<!-- ? element name = "根標(biāo)簽名"--><element name="books">
<!-- ? ? ? complexType表示當(dāng)前標(biāo)簽是復(fù)雜的元素--><complexType><sequence>
<!-- ? ? ? ? ? ? ? 定義book復(fù)雜元素,maxOccurs:該標(biāo)簽最多出現(xiàn)的次數(shù),unbounded是無(wú)限制--><element name="book" maxOccurs="unbounded"><complexType><sequence>
<!-- ? ? ? ? ? ? ? ? ? ? ? ? ? 定義簡(jiǎn)單元素--><element name="name" type="string"/><element name="version" type="string"/></sequence><attribute name="id" type="string" use="required"></attribute></complexType>
?</element>
?</sequence>
?</complexType></element>
?
</schema>
?
(8)schema和DTD約束的區(qū)別
-
schema約束文件也是一個(gè)xml文件,符合x(chóng)m的語(yǔ)法,這個(gè)文件的后綴名.xsd
-
一個(gè)xml中可以引用多個(gè)schema約束文件,多個(gè)schema使用名稱(chēng)空間區(qū)分(名稱(chēng)空間類(lèi)似于java包名)
-
dtd里面元素類(lèi)型的取值比較單一常見(jiàn)的是PCDATA類(lèi)型,但是在schema里面可以支持很多個(gè)數(shù)據(jù)類(lèi)型
-
schema語(yǔ)法更加的復(fù)雜