XML学习笔记02【xml_解析】
- Java后端 學(xué)習(xí)路線 筆記匯總表【黑馬程序員】
目錄
03 xml_解析
xml_解析_解析方式
xml_解析_常見(jiàn)的解析器
xml_解析_Jsoup_快速入門
xml_解析_Jsoup_Jsoup對(duì)象
xml_解析_Jsoup_Document對(duì)象
xml_解析_Jsoup_Element對(duì)象
xml_解析_Jsoup_根據(jù)選擇器查詢
xml_解析_Jsoup_根據(jù)Xpath查詢
03 xml_解析
xml_解析_解析方式
解析:操作xml文檔,將文檔中的數(shù)據(jù)讀取到內(nèi)存中
?? ?* 操作xml文檔
?? ??? ?1. 解析(讀取):將文檔中的數(shù)據(jù)讀取到內(nèi)存中
?? ??? ?2. 寫(xiě)入:將內(nèi)存中的數(shù)據(jù)保存到xml文檔中。持久化的存儲(chǔ)
?? ?* 解析xml的方式:
?? ??? ?1. DOM:將標(biāo)記語(yǔ)言文檔一次性加載進(jìn)內(nèi)存,在內(nèi)存中形成一顆dom樹(shù)
?? ??? ??? ?* 優(yōu)點(diǎn):操作方便,可以對(duì)文檔進(jìn)行CRUD的所有操作
?? ??? ??? ?* 缺點(diǎn):占內(nèi)存
?? ??? ?2. SAX:逐行讀取,基于事件驅(qū)動(dòng)的。
?? ??? ??? ?* 優(yōu)點(diǎn):不占內(nèi)存。
?? ??? ??? ?* 缺點(diǎn):只能讀取,不能增刪改
xml_解析_常見(jiàn)的解析器
* xml常見(jiàn)的解析器:
* Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過(guò)DOM,CSS以及類似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)。
xml_解析_Jsoup_快速入門
* 快速入門:
? ? * 步驟:
* 代碼:...
??
??
package cn.itcast.xml.jsoup;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import java.io.File; import java.io.IOException;/*** Jsoup快速入門*/ public class JsoupDemo1 {public static void main(String[] args) throws IOException {//2.獲取Document對(duì)象,根據(jù)xml文檔獲取//2.1獲取student.xml的pathString path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();//2.2解析xml文檔,加載文檔進(jìn)內(nèi)存,獲取dom樹(shù)--->DocumentDocument document = Jsoup.parse(new File(path), "utf-8");//3.獲取元素對(duì)象 ElementElements elements = document.getElementsByTag("name");System.out.println(elements.size());//3.1獲取第一個(gè)name的Element對(duì)象Element element = elements.get(0);//3.2獲取數(shù)據(jù)String name = element.text();System.out.println(name);} }xml_解析_Jsoup_Jsoup對(duì)象
* 對(duì)象的使用:
? ? 1. Jsoup:工具類,可以解析html或xml文檔,返回Document。
? ? ? ? ? ? * parse:解析html或xml文檔,返回Document
? ? ? ? ? ? ? ? * parse?(File in, String charsetName):解析xml或html文件的。
?? ??? ??? ??? ?* parse?(String html):解析xml或html字符串
?? ??? ??? ??? ?* parse?(URL url, int timeoutMillis):通過(guò)網(wǎng)絡(luò)路徑獲取指定的html或xml的文檔對(duì)象
? ? 2. Document:文檔對(duì)象,代表內(nèi)存中的dom樹(shù)。
? ? 3. Elements:元素Element對(duì)象的集合,可以當(dāng)做 ArrayList<Element>來(lái)使用。
? ? 4. Element:元素對(duì)象
? ? 5. Node:節(jié)點(diǎn)對(duì)象
??
??
package cn.itcast.xml.jsoup;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import java.io.File; import java.io.IOException; import java.net.URL;/*** Jsoup對(duì)象功能*/ public class JsoupDemo2 {public static void main(String[] args) throws IOException {//2.1獲取student.xml的pathString path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();//2.2解析xml文檔,加載文檔進(jìn)內(nèi)存,獲取dom樹(shù)--->Document/* Document document = Jsoup.parse(new File(path), "utf-8");System.out.println(document);*///2.parse?(String html):解析xml或html字符串/* String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +"\n" +"<students>\n" +"\t<student number=\"heima_0001\">\n" +"\t\t<name>tom</name>\n" +"\t\t<age>18</age>\n" +"\t\t<sex>male</sex>\n" +"\t</student>\n" +"\t<student number=\"heima_0002\">\n" +"\t\t<name>jack</name>\n" +"\t\t<age>18</age>\n" +"\t\t<sex>female</sex>\n" +"\t</student>\n" +"\n" +"</students>";Document document = Jsoup.parse(str);System.out.println(document);*///3.parse?(URL url, int timeoutMillis):通過(guò)網(wǎng)絡(luò)路徑獲取指定的html或xml的文檔對(duì)象URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");//代表網(wǎng)絡(luò)中的一個(gè)資源路徑Document document = Jsoup.parse(url, 10000);System.out.println(document);} }xml_解析_Jsoup_Document對(duì)象
* 對(duì)象的使用:
? ? 1. Jsoup:工具類,可以解析html或xml文檔,返回Document。
? ? 2. Document:文檔對(duì)象。代表內(nèi)存中的dom樹(shù)
?? ??? ??? ?* 獲取Element對(duì)象
?? ??? ??? ??? ?* getElementById (String id):根據(jù)id屬性值獲取唯一的element對(duì)象
?? ??? ??? ??? ?* getElementsByTag (String tagName):根據(jù)標(biāo)簽名稱獲取元素對(duì)象集合
?? ??? ??? ??? ?* getElementsByAttribute (String key):根據(jù)屬性名稱獲取元素對(duì)象集合
?? ??? ??? ??? ?* getElementsByAttributeValue (String key, String value):根據(jù)對(duì)應(yīng)的屬性名和屬性值獲取元素對(duì)象集合
? ? 3. Elements:元素Element對(duì)象的集合,可以當(dāng)做 ArrayList<Element>來(lái)使用。
? ? 4. Element:元素對(duì)象
? ? 5. Node:節(jié)點(diǎn)對(duì)象
??
package cn.itcast.xml.jsoup;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import java.io.File; import java.io.IOException; import java.net.URL;/*** Document/Element對(duì)象功能*/ public class JsoupDemo3 {public static void main(String[] args) throws IOException {//1.獲取student.xml的pathString path = JsoupDemo3.class.getClassLoader().getResource("student.xml").getPath();//2.獲取Document對(duì)象Document document = Jsoup.parse(new File(path), "utf-8");//3.獲取元素對(duì)象了。//3.1獲取所有student對(duì)象Elements elements = document.getElementsByTag("student");System.out.println(elements);System.out.println("-----------");//3.2 獲取屬性名為id的元素對(duì)象們Elements elements1 = document.getElementsByAttribute("id");System.out.println(elements1);System.out.println("-----------");//3.2獲取 number屬性值為heima_0001的元素對(duì)象Elements elements2 = document.getElementsByAttributeValue("number", "heima_0001");System.out.println(elements2);System.out.println("-----------");//3.3獲取id屬性值的元素對(duì)象Element itcast = document.getElementById("itcast");System.out.println(itcast);} }xml_解析_Jsoup_Element對(duì)象
* 對(duì)象的使用:
? ? 1. Jsoup:工具類,可以解析html或xml文檔,返回Document。
? ? 2. Document:文檔對(duì)象。代表內(nèi)存中的dom樹(shù)
? ? 3. Elements:元素Element對(duì)象的集合,可以當(dāng)做 ArrayList<Element>來(lái)使用。? ??
? ? 4. Element:元素對(duì)象
?? ??? ??? ?1. 獲取子元素對(duì)象
?? ??? ??? ??? ?* getElementById (String id):根據(jù)id屬性值獲取唯一的element對(duì)象
?? ??? ??? ??? ?* getElementsByTag (String tagName):根據(jù)標(biāo)簽名稱獲取元素對(duì)象集合
?? ??? ??? ??? ?* getElementsByAttribute (String key):根據(jù)屬性名稱獲取元素對(duì)象集合
?? ??? ??? ??? ?* getElementsByAttributeValue (String key, String value):根據(jù)對(duì)應(yīng)的屬性名和屬性值獲取元素對(duì)象集合
?? ??? ??? ?2. 獲取屬性值
?? ??? ??? ??? ?* String attr(String key):根據(jù)屬性名稱獲取屬性值
?? ??? ??? ?3. 獲取文本內(nèi)容
?? ??? ??? ??? ?* String text():獲取文本內(nèi)容
?? ??? ??? ??? ?* String html():獲取標(biāo)簽體的所有內(nèi)容(包括子標(biāo)簽的字符串內(nèi)容)
? ? 5. Node:節(jié)點(diǎn)對(duì)象
?? ??? ??? ?* 是Document和Element的父類
??
package cn.itcast.xml.jsoup;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import java.io.File; import java.io.IOException;/*** Element對(duì)象功能*/ public class JsoupDemo4 {public static void main(String[] args) throws IOException {//1.獲取student.xml的pathString path = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath();//2.獲取Document對(duì)象Document document = Jsoup.parse(new File(path), "utf-8");/*Element:元素對(duì)象1. 獲取子元素對(duì)象* getElementById?(String id):根據(jù)id屬性值獲取唯一的element對(duì)象* getElementsByTag?(String tagName):根據(jù)標(biāo)簽名稱獲取元素對(duì)象集合* getElementsByAttribute?(String key):根據(jù)屬性名稱獲取元素對(duì)象集合* getElementsByAttributeValue?(String key, String value):根據(jù)對(duì)應(yīng)的屬性名和屬性值獲取元素對(duì)象集合2. 獲取屬性值* String attr(String key):根據(jù)屬性名稱獲取屬性值3. 獲取文本內(nèi)容* String text():獲取所有字標(biāo)簽的純文本內(nèi)容* String html():獲取標(biāo)簽體的所有內(nèi)容(包括子標(biāo)簽的標(biāo)簽和文本內(nèi)容)*///通過(guò)Document對(duì)象獲取name標(biāo)簽,獲取所有的name標(biāo)簽,可以獲取到兩個(gè)Elements elements = document.getElementsByTag("name");System.out.println(elements.size());System.out.println("----------------");//通過(guò)Element對(duì)象獲取子標(biāo)簽對(duì)象Element element_student = document.getElementsByTag("student").get(0);Elements ele_name = element_student.getElementsByTag("name");System.out.println(ele_name.size());//獲取student對(duì)象的屬性值String number = element_student.attr("NUMBER");System.out.println(number);System.out.println("------------");//獲取文本內(nèi)容String text = ele_name.text();String html = ele_name.html();System.out.println(text);System.out.println(html);} }xml_解析_Jsoup_根據(jù)選擇器查詢
* 快捷查詢方式:
? ? 1. selector:選擇器
? ? ? ? ? ? * 使用的方法:Elements?? ?select?(String cssQuery)
? ? ? ? ? ? ? ? * 語(yǔ)法:參考Selector類中定義的語(yǔ)法
? ? 2. XPath
xml_解析_Jsoup_根據(jù)Xpath查詢
* 快捷查詢方式:
? ? 1. selector:選擇器
? ? ? ? ? ? * 使用的方法:Elements?? ?select?(String cssQuery)
? ? ? ? ? ? ? ? * 語(yǔ)法:參考Selector類中定義的語(yǔ)法
? ? 2. XPath:XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言。
? ? ? ? ? ? * 使用Jsoup的Xpath需要額外導(dǎo)入jar包。
? ? ? ? ? ? * 查詢w3cshool參考手冊(cè),使用xpath的語(yǔ)法完成查詢
? ? ? ? ? ? * 代碼:...
??
package cn.itcast.xml.jsoup;import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException; import cn.wanghaomiao.xpath.model.JXDocument; import cn.wanghaomiao.xpath.model.JXNode; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements;import java.io.File; import java.io.IOException; import java.util.List;/*** XPath查詢*/ public class JsoupDemo6 {public static void main(String[] args) throws IOException, XpathSyntaxErrorException {//1.獲取student.xml的pathString path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();//2.獲取Document對(duì)象Document document = Jsoup.parse(new File(path), "utf-8");//3.根據(jù)document對(duì)象,創(chuàng)建JXDocument對(duì)象JXDocument jxDocument = new JXDocument(document);//4.結(jié)合x(chóng)path語(yǔ)法查詢//4.1查詢所有student標(biāo)簽List<JXNode> jxNodes = jxDocument.selN("//student");for (JXNode jxNode : jxNodes) {System.out.println(jxNode);}System.out.println("--------------------");//4.2查詢所有student標(biāo)簽下的name標(biāo)簽List<JXNode> jxNodes2 = jxDocument.selN("//student/name");for (JXNode jxNode : jxNodes2) {System.out.println(jxNode);}System.out.println("--------------------");//4.3查詢student標(biāo)簽下帶有id屬性的name標(biāo)簽List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");for (JXNode jxNode : jxNodes3) {System.out.println(jxNode);}System.out.println("--------------------");//4.4查詢student標(biāo)簽下帶有id屬性的name標(biāo)簽 并且id屬性值為itcastList<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");for (JXNode jxNode : jxNodes4) {System.out.println(jxNode);}} }加油~? ?開(kāi)始學(xué)習(xí)JavaWeb~
總結(jié)
以上是生活随笔為你收集整理的XML学习笔记02【xml_解析】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: XML学习笔记01【xml_基础、xml
- 下一篇: fluorinefx (AMF3 for