最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java解析XML詳解

 更新時(shí)間:2021年07月09日 17:06:45   作者:程序dunk  
這篇文章主要介紹了XML解析四種方式代碼示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

XML的主要用途

  • --數(shù)據(jù)存儲和數(shù)據(jù)描述
  • --是一個(gè)優(yōu)良的配置文件
  • --相當(dāng)于一個(gè)小型數(shù)據(jù)庫
  • --XML不依賴于任何一種編程語言,是獨(dú)立的W3C提供的規(guī)范,所以可以完成多種語言之間的數(shù)據(jù)交換(重點(diǎn))

XML的語法嚴(yán)格,并且完全區(qū)分大小寫

  • XML(eXtensible Markup Language)-描述事物本身 .xml

XSL (eXtensible Stylesheet Language)-修飾XML XSL文件也有單獨(dú)的文件,文件后綴 .xsl

通過以下陳程序引入xsl文件

<?xml-stylesheet type="text/xsl" href="student.xsl"?>

DTD (Docment Type Definition)-約定xml的標(biāo)簽 在XML文件中只能編寫那些標(biāo)簽,標(biāo)簽中只能編寫那些屬性 DTD有單獨(dú)的文件,文件后綴 .dtd

DTD實(shí)例

Schema-約定xml標(biāo)簽和類型,比DTD編寫更加方便,(約束XML文件) schema有單獨(dú)的文件,文件后綴 .xsd/.xml

實(shí)例是:

<?xml version="1.0" encoding="gb2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="叢書">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="書">
					<xs:element name="名"  minoccurs="1"></xs:element>
					<xs:element name="人"></xs:element>
					<xs:element name="價(jià)">
						<xs:attribute name="unit">
							<xs:enumeration value="RMB"/>
							<xs:enumeration value="美元"/>
							<xs:enumeration value="日元"/>
						</xs:attribute>
					</xs:element>
				</xs:element>
		</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

可以擴(kuò)展的原因:DTD可以修改

對比HTML

HTML(Hyper Text Markup language

*超文本傳輸標(biāo)記語句(程序員不能自己擴(kuò)展)

*HTML主要用途:做頁面展示,不會做數(shù)據(jù)處理

*語法松散,不區(qū)分大小寫

CSS

DTD(Doucment Type Defined)約束HTML能有那些標(biāo)簽,標(biāo)簽?zāi)苡心切傩?/p>

schema (DTD的升級版,語法更新一些,和DTD達(dá)到同等效果)

不可擴(kuò)展原因:DTD不可擴(kuò)展

關(guān)于XML文件的解析?

*無論是哪一種編程語言,對XML文件的解析都包括兩種方式:

*DOM解析

*SAX解析(org.xml.sax.helps DefaultHandler)

DOM解析

*原理

在開始解析XML文件的時(shí)候,將整個(gè)XMl文件全部加載到內(nèi)存中

在內(nèi)存中編程語言將XML文件映射成一顆DOM樹,這顆樹就是一個(gè)

對象,然后我們對這棵樹上的任意節(jié)點(diǎn)進(jìn)行增刪改查操作,由于

這棵樹全部都在內(nèi)存上,解析過去的節(jié)點(diǎn)可以再次解析,比較靈活。

*優(yōu)點(diǎn)

靈活,解析過去的節(jié)點(diǎn),可以再次解析

*缺點(diǎn)

如果XML文件比較大,可能會導(dǎo)致內(nèi)存溢出,即使不導(dǎo)致內(nèi)存溢出,

也會耗費(fèi)大量內(nèi)存,內(nèi)存少了項(xiàng)目的運(yùn)行效率自然就降低了。

*什么情況下選擇dom解析方式

如果很靈活的操作每一個(gè)元素,選用dom解析,但是注意文件需要小一些

SAX解析

*原理

SAX解析是基于事件驅(qū)動型的解析方式,他的解析不需要將整個(gè)XML文件全部

轉(zhuǎn)載到內(nèi)存中,解析的時(shí)候是有順序的,在XML文件中從上往下依次解析,遇

到開始標(biāo)簽,表示發(fā)生了一個(gè)特定的事件,此時(shí)執(zhí)行一段特定的程序,遇到結(jié)束

標(biāo)簽表示又發(fā)生一個(gè)特定事件,此時(shí)執(zhí)行一段特定的程序完成解析。

*優(yōu)點(diǎn)

不需要轉(zhuǎn)載XML文件,所以不會占用大量內(nèi)存, 適合大文件

*缺點(diǎn)

解析過去的節(jié)點(diǎn)不能重復(fù)解析,除非重頭開始

*什么情況下選擇SAX解析方式

大文件適合使用SAX解析

作為程序員如何解析XML文件,解析XMl文件的開源項(xiàng)目都包括那些?

java解析XML相關(guān)的開源項(xiàng)目

*DOM4j(Dom for Java)

*JDOM

.....

JDK自帶一套,是實(shí)現(xiàn)W3C規(guī)范的

*org.w3c.com.*; 基于DOM解析

*org.xml.sax.*; 基于SAX解析

為了提高我們解析XMl文件的效率,還涉及到XPATH。(是一種標(biāo)簽匹配方式,類似于正則表達(dá)式,可以讓我們程序快速定位XML文件中的標(biāo)簽)

解析XML文件涉及到:

DOM4j/JDOM/W3C+......Xpath

JDK自帶的一套解析

首先在src目錄下創(chuàng)建一個(gè)xml文件

以下為解析過程

/**
 * 使用JDK自帶的"Dom解析"XML文件(讀)
 */
public class Text04 {
    public static void main(String[] args) throws Exception {
        //創(chuàng)建文檔解析器工廠對象
        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
        //創(chuàng)建文檔解析器對象
        DocumentBuilder builder=factory.newDocumentBuilder();
        //開始解析XML文件
        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();
        Document document =builder.parse(new File(path));//dom樹,在內(nèi)存中生成了一顆dom樹
        //獲取根元素
        Node rootNode=document.getFirstChild();
        //獲取根元素的名字
        System.out.println(rootNode.getNodeName());
        //通過根元素獲取其他元素
        Node driverNode=document.getElementsByTagName("driver").item(0);
        String driver =driverNode.getTextContent();
        System.out.println(driver);
    }
}

輸出結(jié)果

使用dom4j開源項(xiàng)目(基于dom解析)解析xml文件(讀)

需要將dom4j開源項(xiàng)目的jar包作為目錄導(dǎo)入

/**
 * 使用dom4j開源項(xiàng)目解析XML文件(讀)
 *
 * 讀XML文件
 *
 * DOM4j
 *
 * 基于dom方式
 */
public class Text01 {
    public static void main(String[] args) throws Exception {
        //創(chuàng)建解析器對象
        SAXReader reader=new SAXReader();//雖然使用了SAXReader,但是還是基于DOM的解析方式
        //獲取文檔對象,還是dom樹
        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();
        Document document= reader.read(new File(path));
        //獲取根元素
        Element rootElement=document.getRootElement();
        //System.out.println(element.getName());
        //獲取driver元素
        Element driverElement =rootElement.element("driver");
        //在獲取文本
        String driver=driverElement.getText();
        //System.out.println(driver);
        //直接獲取元素的文本內(nèi)容
        driver=rootElement.elementText("driver");
        System.out.println(driver);
        System.out.println(rootElement.elementText("url"));
        System.out.println(rootElement.elementText("user"));
        System.out.println(rootElement.elementText("password"));

    }
}

輸出結(jié)果

使用dom4j開源項(xiàng)目(基于dom解析)解析xml文件(寫)

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileWriter;

/**
 * 使用dom4j開源項(xiàng)目解析XML文件(寫)
 */
public class Text02 {
    public static void main(String[] args) throws Exception {
        //創(chuàng)建文檔對象
        Document document= DocumentHelper.createDocument();

        //添加根元素
        Element studentInfoElt=document.addElement("學(xué)生信息");

        //給學(xué)生信息節(jié)點(diǎn)添加子節(jié)點(diǎn)學(xué)生節(jié)點(diǎn)
        Element studentElt=studentInfoElt.addElement("學(xué)生");

        //給學(xué)生節(jié)點(diǎn)添加id屬性
        studentElt.addAttribute("id","110");

        //給學(xué)生節(jié)點(diǎn)添加名字字節(jié)點(diǎn)
        Element nameElt=studentElt.addElement("名字");

        //設(shè)置名字節(jié)點(diǎn)文本
        nameElt.setText("張三");

        //給學(xué)生節(jié)點(diǎn)添加性別字節(jié)點(diǎn)
        Element sexElt=studentElt.addElement("性別");

        //設(shè)置名字節(jié)點(diǎn)文本
        sexElt.setText("男");

        //開始寫
        OutputFormat format= OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");

        String path="students.xml";
        XMLWriter xmlWriter=new XMLWriter(new FileWriter(new File(path)),format);

        xmlWriter.write(document);
        xmlWriter.close();


    }
}

最終生成的xml文件

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望你能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)國際化的操作步驟

    SpringBoot實(shí)現(xiàn)國際化的操作步驟

    國際化(Internationalization) 是指為了適應(yīng)不同語言、文化和地區(qū)的用戶,使軟件能夠方便地進(jìn)行本地化修改的過程,本文介紹了SpringBoot 國際化功能的簡單使用,感興趣的朋友可以參考下
    2024-02-02
  • java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    本篇文章主要介紹了java如何實(shí)現(xiàn)判斷文件的真實(shí)類型,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    這篇文章主要介紹了Java之URLEncoder、URLDecoder、Base64編碼與解碼方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 探討Java驗(yàn)證碼制作(下篇)

    探討Java驗(yàn)證碼制作(下篇)

    這篇文章主要介紹了探討Java驗(yàn)證碼制作(下篇)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Spring中Eureka的自我保護(hù)詳解

    Spring中Eureka的自我保護(hù)詳解

    這篇文章主要介紹了Spring中Eureka的自我保護(hù)詳解,當(dāng)Eureka Server節(jié)點(diǎn)在短時(shí)間內(nèi)丟失過多客戶端時(shí)(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個(gè)節(jié)點(diǎn)就會進(jìn)入自我保護(hù)模式,一旦進(jìn)入該模式,Eureka Server就會保護(hù)服務(wù)注冊表中的信息,需要的朋友可以參考下
    2023-11-11
  • SpringBoot中郵件任務(wù)的使用

    SpringBoot中郵件任務(wù)的使用

    這篇文章主要介紹了SpringBoot中郵件任務(wù)的使用,SpringBoot?郵件任務(wù)是指使用SpringBoot框架來實(shí)現(xiàn)郵件發(fā)送和接收的功能,通過SpringBoot的自動配置和簡化的開發(fā)流程,我們可以輕松地集成郵件功能到我們的應(yīng)用程序中,需要的朋友可以參考下
    2023-10-10
  • java中使用Files.readLines()處理文本中行數(shù)據(jù)方式

    java中使用Files.readLines()處理文本中行數(shù)據(jù)方式

    這篇文章主要介紹了java中使用Files.readLines()處理文本中行數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解決IDEA 2020.3 lombok失效問題

    解決IDEA 2020.3 lombok失效問題

    這篇文章主要介紹了IDEA 2020.3 lombok失效問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Maven的pom.xml文件結(jié)構(gòu)中的build

    Maven的pom.xml文件結(jié)構(gòu)中的build

    本文主要介紹了Maven的pom.xml文件結(jié)構(gòu)中的build,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring MVC實(shí)現(xiàn)的登錄攔截器代碼分享

    Spring MVC實(shí)現(xiàn)的登錄攔截器代碼分享

    這篇文章主要介紹了Spring MVC實(shí)現(xiàn)的登錄攔截器代碼分享,涉及攔截器的簡單介紹,攔截器和過濾器的區(qū)以及攔截器實(shí)現(xiàn)代碼等相關(guān)內(nèi)容,這里分享給大家,供需要的朋友參考。
    2017-10-10

最新評論

慈利县| 油尖旺区| 甘谷县| 长白| 兴安盟| 苍山县| 青田县| 黄陵县| 离岛区| 苍梧县| 闸北区| 九龙城区| 南江县| 蒲城县| 夏河县| 钟山县| 偃师市| 定襄县| 吉水县| 林芝县| 颍上县| 万宁市| 广南县| 和顺县| 五大连池市| 潜山县| 临武县| 英超| 辉南县| 龙泉市| 翁牛特旗| 海林市| 沛县| 武邑县| 曲沃县| 开原市| 江都市| 龙井市| 长治市| 惠东县| 武夷山市|