XML入門介紹

来源:https://www.cnblogs.com/kohler21/archive/2022/07/13/16474116.html
-Advertisement-
Play Games

XML 簡介 什麼是 xml? xml 是可擴展的標記性語言。 xml 的作用? xml 的主要作用有: 1、用來保存數據,而且這些數據具有自我描述性 2、它還可以做為項目或者模塊的配置文件 3、還可以做為網路傳輸數據的格式(現在 JSON 為主)。 xml 語法 文檔聲明。 元素(標簽) xml ...


目錄

XML 簡介

什麼是 xml?
xml 是可擴展的標記性語言。

xml 的作用?
xml 的主要作用有:
1、用來保存數據,而且這些數據具有自我描述性
2、它還可以做為項目或者模塊的配置文件
3、還可以做為網路傳輸數據的格式(現在 JSON 為主)。

xml 語法

  1. 文檔聲明。
  2. 元素(標簽)
  3. xml 屬性
  4. xml 註釋
  5. 文本區域(CDATA 區)

文檔聲明

我們先創建一個簡單 XML 文件,用來描述圖書信息

(1)創建一個 xml 文件

文件名:

<?xml version="1.0" encoding="UTF-8"?> xml 聲明。
<!-- xml 聲明 version 是版本的意思 encoding 是編碼 -->

而且這個<?xml 要連在一起寫,否則會有報錯

屬性

version 是版本號
encoding 是 xml 的文件編碼
standalone="yes/no" 表示這個 xml 文件是否是獨立的 xml 文件

(2)圖書有 id 性 屬性 一 表示唯一 標識,書名,有作者,價格的信息

books.xml文件內容:

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 聲明 version 是版本的意思 encoding 是編碼 -->
<books> <!-- 這是 xml 註釋 -->
    <book id="SN9787302575443"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
        <name>Java 2實用教程(第6版)</name> <!-- name 標簽描述 的是圖書 的信息 -->
        <author>耿祥義、張躍平</author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
        <publisher>清華大學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
        <price>65</price> <!-- price 單詞是價格,描述的是圖書 的價格 -->
    </book>
    <book id="SN9787020122172"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
        <name>駱駝祥子</name> <!-- name 標簽描述 的是圖書 的信息 -->
        <author>老舍</author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
        <publisher>人民文學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
        <price>20.20</price><!-- price 單詞是價格,描述的是圖書 的價格 -->
    </book>
</books>

在瀏覽器中可以查看到文檔:

xml 註釋

html 和 XML 註釋 一樣 :

<!-- html 註釋 -->

元素(標簽)

html 標簽

格式 <標簽名>封裝的數據</標簽名>
單標簽 <標簽名 /> <br /> 換行 <hr />水平線
雙標簽 <標簽名>封裝的數據</標簽名>

1. 標簽名大小寫不敏感
2. 標簽有屬性,有基本屬性和事件屬性
3. 標簽要閉合(不閉合 ,html 中不報錯。但我們要養成良好的書寫習慣。閉合)

1)什麼是 xml 元素

元素是指從開始標簽到結束標簽的內容。
例如:

<title>java2實用教程</title>

元素 我們可以簡單的理解為是 標簽。
Element 翻譯 元素

2)XML 命名規則

XML 元素必須遵循以下命名規則:

  1. 名稱可以含字母、數字以及其他的字元
    例如:
<book id="SN9787302575443"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
<name>Java 2實用教程(第6版)</name> <!-- name 標簽描述 的是圖書 的信息 -->
<author>耿祥義、張躍平</author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
<publisher>清華大學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
<price>65</price> <!-- price 單詞是價格,描述的是圖書 的價格 -->
  1. 名稱不能以數字或者標點符號開始

  1. 儘管以“xml”(或者 XML、Xml)是可以的、不報錯的,但是不建議名稱以字元 “xml”(或者 XML、Xml)開始

  1. 名稱不能包含空格

3)xml 也 中的元素(標簽)也 成 分成 單標簽和雙標簽:

單標簽
格式:

<標簽名 屬性=”值” 屬性=”值” ...... />

雙標簽
格式:

< 標簽名 屬性=”值” 屬性=”值” ......>文本數據或子標簽</標簽名>

xml 屬性

xml 的標簽屬性和 html 的標簽屬性是非常類似的, 屬性可以提供元素的額外信息
在標簽上可以書寫屬性:
一個標簽上可以書寫多個屬性。每個屬性的值必須使用 引號 引起來。
的規則和標簽的書寫規則一致。

API文檔截圖:

  1. 屬性必須使用引號引起來,不引起來會報錯
    示例:

語法規則

  1. 所有 XML 元素都須有關閉標簽

  1. XML 標簽對大小寫敏感

  2. XML 必須正確地嵌套

  3. XML 文檔必須有根元素
    根元素就是頂級元素,
    沒有父標簽的元素,叫頂級元素。
    根元素是沒有父標簽的頂級元素,而且是唯一一個才行。

  4. XML 的屬性值須加引號

  5. XML 中的特殊字元



7. 文本區域(CDATA 區)
CDATA 語法可以告訴 xml 解析器,我 CDATA 里的文本內容,只是純文本,不需要 xml 語法解析
CDATA 格式:

<![CDATA[ 這裡可以把你輸入的字元原樣顯示,不會解析 xml ]]>

示例:

    <book id="SN9787302575443"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
        <name>Java 2實用教程(第6版)</name> <!-- name 標簽描述 的是圖書 的信息 -->
        <author><![CDATA[<<<耿祥義、張躍平>>>]]></author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
        <publisher>清華大學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
        <price>65</price> <!-- price 單詞是價格,描述的是圖書 的價格 -->
    </book>

xml 解析技術介紹

xml 可擴展的標記語言。
不管是 html 文件還是 xml 文件它們都是標記型文檔,都可以使用 w3c 組織制定的 dom 技術來解析。

document 對象表示的是整個文檔(可以是 html 文檔,也可以是 xml 文檔)

早期 JDK 為我們提供了兩種 xml 解析技術 DOM 和 和 Sax 簡介( 已經過時,但需要知道這兩種技術 )
dom 解析技術是 W3C 組織制定的,而所有的編程語言都對這個解析技術使用了自己語言的特點進行實現。
Java 對 dom 技術解析標記也做了實現。
sun 公司在 JDK5 版本對 dom 解析技術進行升級:SAX( Simple API for XML )
SAX 解析,它跟 W3C 制定的解析不太一樣。它是以類似事件機制通過回調告訴用戶當前正在解析的內容。
它是一行一行的讀取 xml 文件進行解析的。不會創建大量的 dom 對象。
所以它在解析 xml 的時候,在記憶體的使用上。和性能上。都優於 Dom 解析。
第三方的解析:
jdom 在 dom 基礎上進行了封裝 、dom4j 又對 jdom 進行了封裝。
pull 主要用在 Android 手機開發,是在跟 sax 非常類似都是事件機制解析 xml 文件。
這個 Dom4j 它是第三方的解析技術。我們需要使用第三方給我們提供好的類庫才可以解析 xml 文件。

dom4j 解析技術

Dom4j 類庫的使用

Dom4j包下載:https://kohler.lanzouv.com/iv8R207qmvkh
解壓後:

dom4j 目錄的介紹

  1. docs 是文檔目錄

  1. 查 如何查 Dom4j 的文檔

  1. Dom4j 快速入門

  1. lib 目錄


5. src 目錄是第三方類庫的源碼目錄

dom4j 編程步驟

第一步: 先載入 xml 文件創建 Document 對象
第二步:通過 Document 對象拿到根元素對象
第三步:通過根元素.elelemts(標簽名); 可以返回一個集合,這個集合里放著。所有你指定的標簽名的元素對象
第四步:找到你想要修改、刪除的子元素,進行相應在的操作
第五步,保存到硬碟上

獲取 document 對象

創建一個 lib 目錄,並添加 dom4j 的 jar 包。並添加到類路徑。

需要解析的 books.xml 文件內容:

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 聲明 version 是版本的意思 encoding 是編碼 -->
<books> <!-- 這是 xml 註釋 -->
<book id="SN9787302575443"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
<name>Java 2實用教程(第6版)</name> <!-- name 標簽描述 的是圖書 的信息 -->
<author><![CDATA[<<<耿祥義、張躍平>>>]]></author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
<publisher>清華大學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
<price>65</price> <!-- price 單詞是價格,描述的是圖書 的價格 -->
</book>
<book id="SN9787020122172"> <!-- book 標簽描述一本圖書 id 屬性描述 的是圖書 的編號 -->
<name>駱駝祥子</name> <!-- name 標簽描述 的是圖書 的信息 -->
<author>老舍</author> <!-- author 單詞是作者的意思 ,描述圖書作者 -->
<publisher>人民文學出版社</publisher> <!--publisher 單詞是出版社的意思,描述圖書的出版社-->
<price>20.20</price><!-- price 單詞是價格,描述的是圖書 的價格 -->
</book>
</books>

解析獲取 Document 對象的代碼
第一步,先創建 SaxReader 對象。這個對象,用於讀取 xml 文件,並創建
Document

/*
* dom4j 獲取 Documet 對象
*/
@Test
public void getDocument() throws DocumentException {
// 要創建一個 Document 對象,需要我們先創建一個 SAXReader 對象
SAXReader reader = new SAXReader();
// 這個對象用於讀取 xml 文件,然後返回一個 Document。
Document document = reader.read("src/books.xml");
// 列印到控制台,看看是否創建成功
System.out.println(document);
}

遍歷 、遍歷 簽 標簽 獲取所有標簽中的內容

 /*
     * 讀取 xml 文件中的內容(xml文件即上一步的books.xml)
     */
    @Test
    public void readXML() throws DocumentException {
        // 需要分四步操作:
        // 第一步,通過創建 SAXReader 對象。來讀取 xml 文件,獲取 Document 對象
        // 第二步,通過 Document 對象。拿到 XML 的根元素對象
        // 第三步,通過根元素對象。獲取所有的 book 標簽對象
        // 第四小,遍歷每個 book 標簽對象。然後獲取到 book 標簽對象內的每一個元素,再通過 getText() 方法拿到起始標簽和結束標簽之間的文本內容
        // 第一步,通過創建 SAXReader 對象。來讀取 xml 文件,獲取 Document 對象
        SAXReader reader = new SAXReader();
        //在Junit測試中,相對路徑是從模塊名開始算
        Document document = reader.read("src/books.xml");
        //第二步,通過 Document 對象。拿到 XML 的根元素對象
        Element rootElement =  document.getRootElement();
        //System.out.println(rootElement);
        //第三步,通過根元素對象。獲取所有的 book 標簽對象
        //Element.elements(標簽名)它可以拿到當前元素下的指定的子元素的集合
        //element()和elements()都是通過標簽名查找子元素
        List <Element> books = rootElement.elements("book");
        //第四步,遍歷每個 book 標簽對象。然後獲取到 book 標簽對象內的每一個元素,
        for (Element book : books) {
        // 拿到 book 下麵的 name 元素對象
        Element nameElement = book.element("name");
        // 拿到 book 下麵的 price 元素對象
        Element priceElement = book.element("price");
        // 拿到 book 下麵的 author 元素對象
        Element authorElement = book.element("author");
        // 拿到 book 下麵的 publisher 元素對象
        Element publisherElement = book.element("publisher");
        // 再通過 getText() 方法拿到起始標簽和結束標簽之間的文本內容
        System.out.println("書名:" + nameElement.getText() + " , 價格:"
            + priceElement.getText() + "元, 作者:" + authorElement.getText() + ",出版社:" + publisherElement.getText());
        }
    }
}

列印內容:

如圖片失效等情況請參閱公眾號文章:https://mp.weixin.qq.com/s/T4tsUg4_YRiDRPEF7fhOtQ

歡迎關註公眾號:“愚生淺末”,一起學習交流。

歡迎關註我的公眾號,共同學習


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL Server 中的事務是什麼? SQL Server 中的事務是一組被視為一個單元的 SQL 語句,它們按照“做所有事或不做任何事”的原則執行,成功的事務必須通過 ACID 測試。 事務的 ACID 屬性是什麼? 首字母縮寫詞 ACID 是指事務的四個關鍵屬性 原子性: Atomicity ...
  • 更多技術交流、求職機會、試用福利,歡迎關註位元組跳動數據平臺微信公眾號,回覆【1】進入官方交流群 近年來,OLAP產品的競爭日漸激烈,目前企業間流行的既有Impala、Greenplum等上一代較為成熟的數據分析產品,也有ClickHouse、Kylin、Druid、Doris、StarRocks等在 ...
  • 日前,福建海峽銀行新一代核心業務系統正式上線,關鍵業務系統採用“微服務+分散式”架構,順利完成資料庫國產化替換。 新核心改造歷時14個月,依托騰訊雲企業級分散式資料庫TDSQL良好的相容性、成熟的遷移能力和技術服務支持,海峽銀行快速完成了核心系統的國產資料庫替換,並基於騰訊雲資料庫TDSQL兩地三中 ...
  • 時間:2022-07-13 安裝版本:MySQL-community-8.0.29 0. 刪除MariaDB 在CentOS 7中預設有安裝MariaDB,這個是MySQL的分支,通過其他方式安裝MySQL需要刪除MariaDB或補全依賴關係,但通過yum安裝則會自動覆蓋MariaDB並補全依賴(也 ...
  • . 版本:v0.3 作者:河東西望 日期:2022-7-13 . gerrit系統的上手使用有兩個難點: 部署repo倉庫。 配置訪問控制。 想要上手使用gerrit的同仁們,搭建部署好gerrit系統之後,會發現gerrit的許可權配置不知道從哪裡下手。而預設的許可權配置非常簡單而且開放,不符合企業各 ...
  • **耗時繁雜的歸因監測如何減負增效?怎樣合理評估不同拉新渠道的用戶質量?**類似問題相信每一個移動互聯網App推廣人都會不斷問自己,但卻一直找不到合適的方法從根源解決。廣告互動行為與用戶應用內行為的割裂,是阻礙廣告效果衡量與提升的較大難點。那麼如何解決這個難點呢?分析服務基於渠道評估和買量洞察,給出 ...
  • 瀏覽器改變url 1 改變瀏覽器訪問地址的方式 1-1 不刷新頁面內容,改變瀏覽器訪問地址url 1-1-1 query param location.search = '?page=2'; 1-1-2 hash window.location.hash = 'www.zhihu.com' 如果 原 ...
  • 一、快速入門 1.JavaScript的兩種引入方式 方式一:直接在html裡面寫 目的:實現簡單的彈窗 點擊查看代碼 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--sc ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...