了解、解析、檢索XML
目錄
XML
XML概述
XML的創(chuàng)建、語法規(guī)則
XML文檔約束方式一-DTD約束
XML文檔約束方式二-schema約束
XML解析技術
XML解析技術概述
Dom4J解析XML文件 Dom4J
XML檢索技術:Xpath
XML
XML概述
XML是可擴展標記語言(eXtensible Markup Language)的縮寫,它是是一種數(shù)據(jù)表示格式,可以描述非常復雜的數(shù)據(jù)結構,常用于傳輸和存儲數(shù)據(jù)。文件后綴:.xml
XML的幾個特點和使用場景
一是純文本,默認使用UTF-8編碼;
二是可嵌套; 如果把XML內容存為文件,那么它就是一個XML文件。
XML的使用場景:XML內容經(jīng)常被當成消息進行網(wǎng)絡傳輸,或者作為配置文件用于存儲系統(tǒng)的信息。
用于進行存儲數(shù)據(jù)和傳輸數(shù)據(jù)、作為軟件的配置文件
XML的創(chuàng)建、語法規(guī)則
XML的創(chuàng)建
創(chuàng)建一個XML類型的文件,要求文件的后綴必須使用xml,如hello.xml
XML的語法規(guī)則
文檔聲明必須是第一行:
version:XML默認的版本號碼、該屬性是必須存在的
encoding:本XML文件的編碼
XML的標簽(元素)規(guī)則
標簽由一對尖括號和合法標識符組成:
標簽必須成對出現(xiàn),有開始,有結束:
特殊的標簽可以不成對,但是必須有結束標記,如:
標簽中可以定義屬性,屬性和標簽名空格隔開,屬性值必須用引號引起來
標簽需要正確的嵌套
XML的其他組成
定義注釋信息:
特殊字符
< ? ?< ?小于
> ? ?> ?大于
& ? & ?和號
' ?' ?單引號
" ?" ?引號
存在CDATA區(qū): :可以寫任何內容
XML文檔約束方式一-DTD約束
問題:由于XML文件可以自定義標簽,導致XML文件可以隨意定義,程序在解析的時候可能出現(xiàn)問題。
文檔約束:是用來限定xml文件中的標簽以及屬性應該怎么寫。以此強制約束程序員必須按照文檔約束的規(guī)定來編寫xml文件
編寫DTD約束文檔,后綴必須是.dtd
在需要編寫的XML文件中導入該DTD約束文檔
按照約束的規(guī)定編寫XML文件的內容。
可以約束XML文件的編寫。
不能約束具體的數(shù)據(jù)類型。
XML文檔約束方式二-schema約束
可以約束XML文件的標簽內容格式,以及具體的數(shù)據(jù)類型;本身也是xml文件,格式更嚴謹。
寫schema約束文檔,后綴必須是.xsd,具體的形式到代碼中觀看。
在需要編寫的XML文件中導入該schema約束文檔
按照約束內容編寫XML文件的標簽。
XML解析技術
XML解析技術概述
XML的數(shù)據(jù)的作用是存儲數(shù)據(jù)、做配置信息、進行數(shù)據(jù)傳輸。 最終需要被程序進行讀取,解析里面的信息
XML解析:使用程序讀取XML中的數(shù)據(jù)
兩種解析方式:SAX解析、DOM解析
Dom常見的解析工具
名稱
說明
JAXP
SUN公司提供的一套XML的解析的API
JDOM
JDOM是一個開源項目,它基于樹型結構,利用純JAVA的技術對XML文檔實現(xiàn)解析、生成、序列化以及多種操作。
dom4j
是JDOM的升級品,用來讀寫XML文件的。具有性能優(yōu)異、功能強大和極其易使用的特點,它的性能超過sun公司官方的dom?技術,同時它也是一個開放源代碼的軟件,Hibernate也用它來讀寫配置文件。
jsoup
功能強大DOM方式的XML解析開發(fā)包,尤其對HTML解析更加方便
Document對象:整個xml文檔
Element對象:標簽
Attribute對象:屬性
Text對象:文本內容
Dom4J解析XML文件 Dom4J
得到文檔對象Document,從中獲取元素對象和內容。
SAXReader類
構造器/方法
說明
public?SAXReader()
創(chuàng)建Dom4J的解析器對象
Document?read(String?url)
加載XML文件成為Document對象
Document類
方法名
說明
Element?getRootElement()
獲得根元素對象
Dom4j解析XML的元素、屬性、文本
方法名
說明
List
得到當前元素下所有子元素
List
得到當前元素下指定名字的子元素返回集合
Element?element(String?name)
得到當前元素下指定名字的子元素,如果有很多名字相同的返回第一個
String?getName()
得到元素名字
String??attributeValue(String?name)
通過屬性名直接得到屬性值
String?elementText(子元素名)
得到指定名稱的子元素的文本
String?getText()
得到文本
import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.SAXValidator; import org.junit.Test; import java.io.File; import java.io.InputStream; import java.util.List; public class Dom4jTest1 { @Test public void parseXMLData() throws Exception { //1、創(chuàng)建一個Dom4j的解析器對象,代表了整個dom4j框架 SAXReader saxReader = new SAXReader(); // 2、把XML文件加載到內存中成為一個Document文檔對象 //Document document = saxReader.read(new File("demo5_XML/src/hello.xml")); //getResourceAsStream中的/是直接去src下尋找的文件 InputStream is = Dom4jTest1.class.getResourceAsStream("/hello.xml"); Document document = saxReader.read(is); // 獲取根元素對象 Element root = document.getRootElement(); System.out.println(root.getName()); //根元素名字 List
XML檢索技術:Xpath
Dom4j需要進行文件的全部解析,然后再尋找數(shù)據(jù)。
Xpath技術更加適合做信息檢索。Xpath技術依賴Dom4j技術
XPath在解析XML文檔方面提供了一獨樹一幟的路徑思想,更加優(yōu)雅,高效 XPath使用路徑表達式來定位XML文檔中的元素節(jié)點或屬性節(jié)點。
/元素/子元素/孫元素/孫孫元素
Xpath作用:
檢索XML文件中的信息 絕對路徑: /根元素/子元素/孫元素
方法名
說明
/根元素/子元素/孫元素
從根元素開始,一級一級向下查找,不能跨級
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; import java.util.List; //絕對路徑 public class XpathTest3 { @Test public void parse01() throws Exception { //1.創(chuàng)建解析器對象 SAXReader saxReader = new SAXReader(); //2.把XML加載成Document文檔對象 Document document = saxReader.read(XpathTest3.class.getResourceAsStream("/hello2.xml")); //3.檢索全部的名稱 List
相對路徑:./子元素/孫元素
方法名
說明
./子元素/孫元素
從當前元素開始,一級一級向下查找,不能跨級
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; import java.util.List; //相對路徑 public class XpathTest3 { @Test public void parse02() throws Exception { //1.創(chuàng)建解析器對象 SAXReader saxReader = new SAXReader(); //2.把XML加載成Document文檔對象 Document document = saxReader.read(XpathTest3.class.getResourceAsStream("/hello2.xml")); Element root = document.getRootElement(); //3.檢索全部的名稱 List
全文檢索://contact
方法名
說明
//contact
找contact元素,無論元素在哪里
//contact/name
找contact,無論在哪一級,但name一定是contact的子節(jié)點
//contact//name
contact無論在哪一種,name只要是contact的子孫元素都可以找到
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; import java.util.List; public class XpathTest3 { @Test public void parse03() throws Exception { //1.創(chuàng)建解析器對象 SAXReader saxReader = new SAXReader(); //2.把XML加載成Document文檔對象 Document document = saxReader.read(XpathTest3.class.getResourceAsStream("/hello2.xml")); //3.檢索數(shù)據(jù) List
屬性查找://@屬性名 、//元素[@屬性名]、//元素//[@屬性名=‘值’]
方法名
說明
//@屬性名
查找屬性對象,無論是哪個元素,只要有這個屬性即可。
//元素[@屬性名]
查找元素對象,全文搜索指定元素名和屬性名。
//元素//[@屬性名=‘值’]
查找元素對象,全文搜索指定元素名和屬性名,并且屬性值相等。
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; import java.util.List; public class XpathTest3 { @Test public void parse04() throws Exception { //1.創(chuàng)建解析器對象 SAXReader saxReader = new SAXReader(); //2.把XML加載成Document文檔對象 Document document = saxReader.read(XpathTest3.class.getResourceAsStream("/hello2.xml")); //3.檢索數(shù)據(jù) List
XML
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。