了解、解析、檢索XML

      網(wǎng)友投稿 680 2022-05-29

      目錄

      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ù)、作為軟件的配置文件

      喜羊羊 懶羊羊 羊村 2022-11-11 11:11:11 狼堡 青青草原

      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ū): :可以寫任何內容

      懶羊羊 3 睡覺 SELECT sheep FROM grassland WHERE age > 2; 2; ]]>

      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對象:標簽

      了解、解析、檢索XML

      Attribute對象:屬性

      Text對象:文本內容

      Dom4J解析XML文件 Dom4J

      得到文檔對象Document,從中獲取元素對象和內容。

      SAXReader類

      構造器/方法

      說明

      public?SAXReader()

      創(chuàng)建Dom4J的解析器對象

      Document?read(String?url)

      加載XML文件成為Document對象

      Document類

      方法名

      說明

      Element?getRootElement()

      獲得根元素對象

      Dom4j解析XML的元素、屬性、文本

      方法名

      說明

      List?elements()

      得到當前元素下所有子元素

      List?elements(String?name)

      得到當前元素下指定名字的子元素返回集合

      Element?element(String?name)

      得到當前元素下指定名字的子元素,如果有很多名字相同的返回第一個

      String?getName()

      得到元素名字

      String??attributeValue(String?name)

      通過屬性名直接得到屬性值

      String?elementText(子元素名)

      得到指定名稱的子元素的文本

      String?getText()

      得到文本

      懶羊羊 3 睡覺 SELECT sheep FROM grassland WHERE age > 2; 2; ]]>

      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 elementList = root.elements(); //獲取所有一級子元素 //遍歷 for(Element element : elementList) { System.out.println(element.getName()+" "+element.getTextTrim()); //getText---不去空格 getTextTrim---去空格 } //屬性 Element element = root.element("name"); System.out.println(element.attribute("id").getName()+"-->"+element.attributeValue("id")); } }

      XML檢索技術:Xpath

      Dom4j需要進行文件的全部解析,然后再尋找數(shù)據(jù)。

      Xpath技術更加適合做信息檢索。Xpath技術依賴Dom4j技術

      XPath在解析XML文檔方面提供了一獨樹一幟的路徑思想,更加優(yōu)雅,高效 XPath使用路徑表達式來定位XML文檔中的元素節(jié)點或屬性節(jié)點。

      /元素/子元素/孫元素/孫孫元素

      Xpath作用:

      懶羊羊 3 睡覺 小懶羊 懶小羊 吃草 吃冰淇淋 SELECT sheep FROM grassland WHERE age > 2; 2; ]]>

      檢索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 nameNodes = document.selectNodes("/sheep/info/name"); for (Node nameNode : nameNodes) { Element nameEle = (Element) nameNode; System.out.println(nameEle.getTextTrim()); } } }

      相對路徑:./子元素/孫元素

      方法名

      說明

      ./子元素/孫元素

      從當前元素開始,一級一級向下查找,不能跨級

      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 hobbyNodes = root.selectNodes("./info/hobby"); //.代表了當前元素 for (Node hobbyNode : hobbyNodes) { Element nameEle = (Element) hobbyNode; System.out.println(nameEle.getTextTrim()); } } }

      全文檢索://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 nameNodes = document.selectNodes("http://name"); List hobbyNodes = document.selectNodes("http://info//hobby"); for (Node nameNode : nameNodes) { Element nameEle = (Element) nameNode; System.out.println(nameEle.getTextTrim()); } for (Node hobbyNode : hobbyNodes) { Element nameEle = (Element) hobbyNode; System.out.println(nameEle.getTextTrim()); } } }

      屬性查找://@屬性名 、//元素[@屬性名]、//元素//[@屬性名=‘值’]

      方法名

      說明

      //@屬性名

      查找屬性對象,無論是哪個元素,只要有這個屬性即可。

      //元素[@屬性名]

      查找元素對象,全文搜索指定元素名和屬性名。

      //元素//[@屬性名=‘值’]

      查找元素對象,全文搜索指定元素名和屬性名,并且屬性值相等。

      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 nodes = document.selectNodes("http://name[@id]"); for (Node node : nodes) { Element ele = (Element) node; System.out.println(ele.getTextTrim() + "--->" + ele.attributeValue("id")); } // 查詢name元素(包含id屬性的) Node node = document.selectSingleNode("http://name[@id=1]"); Element ele = (Element) node; System.out.println(ele.getTextTrim()); } }

      XML

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      上一篇:前端嫌棄原生Swagger界面太low,于是我給她開通了超級VIP
      下一篇:讀書筆記:《億級流量網(wǎng)站架構核心技術 -- 跟開濤學搭建高可用高并發(fā)系統(tǒng)》
      相關文章
      久久精品亚洲日本佐佐木明希| 亚洲精品久久久www| 丝袜熟女国偷自产中文字幕亚洲| 亚洲成AV人片高潮喷水| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲精品成人久久| 噜噜噜亚洲色成人网站∨| 亚洲AV无码成人专区片在线观看| 亚洲av午夜成人片精品网站| 青青草原亚洲视频| 亚洲乱码精品久久久久..| 国产亚洲AV无码AV男人的天堂| 在线亚洲97se亚洲综合在线| 亚洲日韩国产精品乱| 亚洲毛片av日韩av无码| 亚洲国产V高清在线观看| 亚洲精品老司机在线观看| 亚洲综合精品网站| 亚洲综合精品香蕉久久网| 国产V亚洲V天堂A无码| 久久久无码精品亚洲日韩蜜桃| 亚洲av网址在线观看| 亚洲高清无在码在线电影不卡| 亚洲福利秒拍一区二区| 亚洲人成网站在线观看播放动漫| 亚洲香蕉在线观看| 亚洲精品自偷自拍无码| 男人的天堂亚洲一区二区三区| 亚洲精品9999久久久久无码| 精品久久久久久亚洲中文字幕| 国产精品亚洲一区二区无码| 国产精品亚洲综合专区片高清久久久 | 亚洲日韩一区精品射精| 亚洲欧美日韩中文无线码| 亚洲AV综合色区无码一二三区| 午夜亚洲乱码伦小说区69堂| 亚洲无码日韩精品第一页| 亚洲精品无码午夜福利中文字幕 | 亚洲国产精品不卡在线电影| 亚洲综合激情六月婷婷在线观看| 亚洲av极品无码专区在线观看|