中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么解析XML

發布時間:2021-07-10 09:01:57 來源:億速云 閱讀:102 作者:chen 欄目:開發技術

本篇內容主要講解“java怎么解析XML”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java怎么解析XML”吧!

目錄
  • XML的主要用途

    • 對比HTML

    • 關于XML文件的解析?

    • JDK自帶的一套解析


XML的主要用途

  • --數據存儲和數據描述

  • --是一個優良的配置文件

  • --相當于一個小型數據庫

  • --XML不依賴于任何一種編程語言,是獨立的W3C提供的規范,所以可以完成多種語言之間的數據交換(重點)

XML的語法嚴格,并且完全區分大小寫

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

java怎么解析XML

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

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

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

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

DTD實例

java怎么解析XML

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

實例是:

<?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="價">
						<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>

可以擴展的原因:DTD可以修改

對比HTML

HTML(Hyper Text Markup language

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

*HTML主要用途:做頁面展示,不會做數據處理

*語法松散,不區分大小寫

CSS

DTD(Doucment Type Defined)約束HTML能有那些標簽,標簽能有那些屬性

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

不可擴展原因:DTD不可擴展

關于XML文件的解析?

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

*DOM解析

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

DOM解析

*原理

在開始解析XML文件的時候,將整個XMl文件全部加載到內存中

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

對象,然后我們對這棵樹上的任意節點進行增刪改查操作,由于

這棵樹全部都在內存上,解析過去的節點可以再次解析,比較靈活。

*優點

靈活,解析過去的節點,可以再次解析

*缺點

如果XML文件比較大,可能會導致內存溢出,即使不導致內存溢出,

也會耗費大量內存,內存少了項目的運行效率自然就降低了。

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

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

SAX解析

*原理

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

轉載到內存中,解析的時候是有順序的,在XML文件中從上往下依次解析,遇

到開始標簽,表示發生了一個特定的事件,此時執行一段特定的程序,遇到結束

標簽表示又發生一個特定事件,此時執行一段特定的程序完成解析。

*優點

不需要轉載XML文件,所以不會占用大量內存, 適合大文件

*缺點

解析過去的節點不能重復解析,除非重頭開始

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

大文件適合使用SAX解析

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

java解析XML相關的開源項目

*DOM4j(Dom for Java)

*JDOM

.....

JDK自帶一套,是實現W3C規范的

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

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

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

解析XML文件涉及到:

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

JDK自帶的一套解析

首先在src目錄下創建一個xml文件

java怎么解析XML

以下為解析過程

/**
 * 使用JDK自帶的"Dom解析"XML文件(讀)
 */
public class Text04 {
    public static void main(String[] args) throws Exception {
        //創建文檔解析器工廠對象
        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
        //創建文檔解析器對象
        DocumentBuilder builder=factory.newDocumentBuilder();
        //開始解析XML文件
        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();
        Document document =builder.parse(new File(path));//dom樹,在內存中生成了一顆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);
    }
}

輸出結果

java怎么解析XML

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

需要將dom4j開源項目的jar包作為目錄導入

/**
 * 使用dom4j開源項目解析XML文件(讀)
 *
 * 讀XML文件
 *
 * DOM4j
 *
 * 基于dom方式
 */
public class Text01 {
    public static void main(String[] args) throws Exception {
        //創建解析器對象
        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);
        //直接獲取元素的文本內容
        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"));

    }
}

輸出結果

java怎么解析XML

使用dom4j開源項目(基于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開源項目解析XML文件(寫)
 */
public class Text02 {
    public static void main(String[] args) throws Exception {
        //創建文檔對象
        Document document= DocumentHelper.createDocument();
        //添加根元素
        Element studentInfoElt=document.addElement("學生信息");
        //給學生信息節點添加子節點學生節點
        Element studentElt=studentInfoElt.addElement("學生");
        //給學生節點添加id屬性
        studentElt.addAttribute("id","110");
        //給學生節點添加名字字節點
        Element nameElt=studentElt.addElement("名字");
        //設置名字節點文本
        nameElt.setText("張三");
        //給學生節點添加性別字節點
        Element sexElt=studentElt.addElement("性別");
        //設置名字節點文本
        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文件

java怎么解析XML

到此,相信大家對“java怎么解析XML”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三原县| 河池市| 固阳县| 巴里| 贵南县| 万全县| 柳河县| 焦作市| 孟津县| 正定县| 吴忠市| 南乐县| 洪洞县| 泸州市| 崇义县| 固原市| 巢湖市| 遵义市| 沙河市| 济宁市| 报价| 佳木斯市| 上思县| 普兰县| 榕江县| 海宁市| 新余市| 延津县| 邵武市| 汨罗市| 安化县| 抚顺县| 肥乡县| 五家渠市| 泾源县| 江孜县| 资阳市| 兴宁市| 宿松县| 温泉县| 昌乐县|