java基礎之XML

来源:https://www.cnblogs.com/huizhipeng/archive/2018/12/11/10100113.html
-Advertisement-
Play Games

java基礎之XML 1. XML解析概述 2. DOM4J介紹 2.1 常用包 2.2 內置元素 2.2 Element類 2.3 Attribute類 2.4 常用操作 3. 代碼演示 3.1 DOM4J讀取xml文件 3.2 DOM4J創建xml文件 3.2 DOM4J修改xml文件 ...


目錄

java基礎之XML

XML是一種通用的數據交換格式,它的平臺無關性、語言無關性、系統無關性、給數據集成與交互帶來了極大的方便。本篇文章重點介紹DOM4J對XML文件的一些操作。

1. XML解析概述

  常見解析方式和解析器

  1. DOM:要求解析器把整個XML文檔裝載到記憶體,並解析成一個Document對象。
    優點:元素與元素之間保留結構關係,故可以進行增刪改查操作。
    缺點:XML文檔過大,可能出現記憶體溢出顯現。
  2. SAX:是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。並以事件驅動的方式進行具體解析,每執行一行,都將觸發對應的事件。
    優點:處理速度快,可以處理大文件
    缺點:只能讀,逐行後將釋放資源。

2. DOM4J介紹

2.1 常用包

包名 作用
import org.dom4j.Document; Document文檔類
import org.dom4j.Element 元素節點類
import org.dom4j.QName; 一個對元素名字的封裝類
import org.dom4j.io.SAXReader; sax讀取類
import org.dom4j.io.XMLWriter xml寫入類
import org.dom4j.io.OutputFormat 輸出格式

2.2 內置元素

元素 含義
Attribute 定義了 XML 的屬性。
Branch 指能夠包含子節點的節點。如XML元素(Element)和文檔(Docuemnts)定義了一個公共的行為
CDATA 定義了 XML CDATA 區域
CharacterData 是一個標識介面,標識基於字元的節點。如CDATA,Comment, Text.
Comment 定義了 XML 註釋的行為
Document 定義了XML 文檔
DocumentType 定義 XML DOCTYPE 聲明
Element 定義XML 元素
ElementHandler 定義了Element 對象的處理器
ElementPath 被 ElementHandler 使用,用於取得當前正在處理的路徑層次信息
Entity 定義 XML entity
Node 為dom4j中所有的XML節點定義了多態行為
NodeFilter 定義了在dom4j 節點中產生的一個濾鏡或謂詞的行為(predicate)
ProcessingInstruction 定義 XML 處理指令
Text 定義 XML 文本節點
Visitor 用於實現 Visitor模式
XPath 在分析一個字元串後會提供一個 XPath 表達式

2.2 Element類

方法 含義
getQName() 元素的QName對象
getNamespace() 元素所屬的Namespace對象
getNamespacePrefix() 元素所屬的Namespace對象的prefix
getNamespaceURI() 元素所屬的Namespace對象的URI
getName() 元素的local name
getQualifiedName() 元素的qualified name
getText() 元素所含有的text內容,如果內容為空則返回一個空字元串而不是null
getTextTrim() 元素所含有的text內容,其中連續的空格被轉化為單個空格,該方法不會返回null
attributeIterator() 元素屬性的iterator,其中每個元素都是

2.3 Attribute類

方法 含義
attributeValue() 元素的某個指定屬性所含的值
elementIterator() 元素的子元素的iterator,其中每個元素都是Element對象
element() 元素的某個指定(qualified name或者local name)的子元素
elementText() 元素的某個指定(qualified name或者local name)的子元素中的text信息
getParent() 元素的父元素
getPath() 元素的XPath表達式,其中父元素的qualified name和子元素的qualified name之間使用”/”分隔
isTextOnly() 是否該元素只含有text或是空元素
isRootElement() 是否該元素是XML樹的根節點

2.4 常用操作

  • 讀取xml文件,獲得document對象.
SAXReader reader = new SAXReader();
Document  document = reader.read(new File("***.xml"));
  • 解析XML形式的文本,得到document對象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
  • 獲取根節點
Element root = dom.getRootElement();
  • 取得某節點的單個子節點
Element memberElm=root.element("title");
  • 獲取節點文字
String text=memberElm.getText();
  • 取得某節點下名為"title"所有位元組點併進行遍歷
List list = rootElm.elements("member");
Iterator<Element> it = list.iterator(); 
while(it.hasNext()){
   Element elm = it.next();
   // do something...
}
  • 在某節點下添加子節點.
Element ageElm = newMemberElm.addElement("age");
  • 設置節點文字.
ageElm.setText("29");
  • 刪除某節點.
parentElm.remove(childElm);
  • 取得某節點下的某屬性
    Element root=document.getRootElement();    
    Attribute attribute=root.attribute("id");
  • 設置某節點的屬性和文字.
newMemberElm.addAttribute("name", "sitinspring");
  • 設置屬性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
  • 刪除某屬性
Attribute attribute=root.attribute("size");// 屬性名name
root.remove(attribute);

3. 代碼演示

3.1 DOM4J讀取xml文件

  test.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <title>巴黎聖母院</title>
        <author>雨果</author>
    </book>
    <book id="2">
        <title>飄</title>
        <author>米切爾</author>
    </book>    
</bookstore>

  1. 使用List列表解析xml

import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
  
public class XmlDemo {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        File file = new File("test.xml");
        Document document = reader.read(file);
        Element root = document.getRootElement();
        List<Element> childElements = root.elements();
        for (Element child : childElements) {
            //已知屬性名情況下
            System.out.println("--->id: " + child.attributeValue("id"));
            System.out.println("title:" + child.elementText("title"));
            System.out.println("author:" + child.elementText("author"));

            //未知屬性名情況下
            /*List<Attribute> attributeList = child.attributes();
            for (Attribute attr : attributeList) {
                System.out.println(attr.getName() + ": " + attr.getValue());
            }
            List<Element> elementList = child.elements();
            for (Element ele : elementList) {
                System.out.println(ele.getName() + ": " + ele.getText());
            }
            System.out.println();*/
           
        }
    }
}
//輸出結果:
--->id: 1
title:巴黎聖母院
author:雨果
--->id: 2
title:飄
author:米切爾

  2. 使用Iterator解析xml

public class XmlDemo {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("test.xml"));
        Element root = document.getRootElement();
          
        Iterator<Element> it = root.elementIterator();
        while (it.hasNext()) {
            Element element = it.next();
            
            //未知屬性名稱情況下
            Iterator<Element> attrIt = element.attributeIterator();
            while (attrIt.hasNext()) {
                Attribute a  = (Attribute) attrIt.next();
                System.out.println(a.getValue());
            }
              
            Iterator<Element> eleIt = element.elementIterator();
            while (eleIt.hasNext()) {
                Element e =  eleIt.next();
                System.out.println(e.getName() + ": " + e.getText());
            }
            System.out.println();
              
            //已知元素名情況下  
            /*System.out.println("id: " + element.attributeValue("id"));
            System.out.println("title: " + element.elementText("title"));
            System.out.println("author: " + element.elementText("author"));
            System.out.println();*/
        }
    }
}
//輸出結果:
id: 1
title:巴黎聖母院
author:雨果

id: 2
title:飄
author:米切爾

3.2 DOM4J創建xml文件

public class XmlDemo {
    public static void main(String[] args) throws Exception {
        Document doc = DocumentHelper.createDocument();
        //增加根節點
        Element books = doc.addElement("bookstore");
        //增加子元素
        Element book1 = books.addElement("book");
        Element title1 = book1.addElement("title");
        Element author1 = book1.addElement("author");
          
        Element book2 = books.addElement("book");
        Element title2 = book2.addElement("title");
        Element author2 = book2.addElement("author");
          
        //為子節點添加屬性
        book1.addAttribute("id", "3");
        //為元素添加內容
        title1.setText("戰爭與和平");
        author1.setText("列夫托爾斯泰");
          
        book2.addAttribute("id", "4");
        title2.setText("紅樓夢");
        author2.setText("曹雪芹");
          
        //實例化輸出格式對象
        OutputFormat format = OutputFormat.createPrettyPrint();
        //設置輸出編碼
        format.setEncoding("UTF-8");
        //創建需要寫入的File對象
        File file = new File("test2.xml");
        //生成XMLWriter對象,構造函數中的參數為需要輸出的文件流和格式
        XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
        //開始寫入,write方法中包含上面創建的Document對象
        writer.write(doc);
    }
}

  運行結果(項目根目錄下):

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>
  <book id="3">
    <title>戰爭與和平</title>
    <author>列夫托爾斯泰</author>
  </book>
  <book id="4">
    <title>紅樓夢</title>
    <author>曹雪芹</author>
  </book>
</bookstore>

3.2 DOM4J修改xml文件

public class XmlDeml {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        File file = new File("test.xml");
        Document document = reader.read(file);
        Element root = document.getRootElement();
        Element nameElement = root.element("book").element("author");
        nameElement.setText("魯迅");
        //寫回XML文檔
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileOutputStream("test.xml"), format);
        writer.write(document);
        writer.close();
    }
}

  運行結果(項目根目錄下):

<?xml version="1.0" encoding="UTF-8"?>

<bookstore> 
  <book id="1"> 
    <title>巴黎聖母院</title>  
    <author>魯迅</author> 
  </book> 
</bookstore>

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

-Advertisement-
Play Games
更多相關文章
  • 調用 // 分頁import pages from 'components/common/pages/pages' components: { pages }, <pages :total="total" :page-size="pageSize" @handleSizeChangeSub="han ...
  • 微服務是Devops場景下熱門的開發框架,在大型項目中被廣泛採用。它把一個大型的單個應用程式和服務拆分為數十個的支持微服務,獨立部署、互相隔離,通過擴展組件來處理功能瓶頸問題,比傳統的應用程式更能有效利用計算資源。微服務之間無需關心對方的模型,它通過事先約定好的介面進行數據流轉,使業務可以高效響應市 ...
  • 責任鏈模式是一種行為型模式,將一系列處理者鏈接在一起,形成一個處理整體,將具體的請求處理者與請求者進行分離,本文介紹了職責鏈模式的意圖,使用場景,以及結構,角色模塊,並且給出來了Java版本的責任鏈模式實現。 ...
  • 博主按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前採用 (_靠這吃飯_)和 (_純粹喜歡_)兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式 :) 0. 項目地址 "每天一個設計模式之訂閱 發佈模式·原文地址" "本節課代碼" "《每天一個設計模式·系列 ...
  • 裝飾模式(Decorator Pattern)是一種比較常見的模式。 定義: 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 裝飾模式類圖如下所示。 裝飾模式有以下4個角色。 抽象構件(Component)角色:用於規範需要裝飾的對象(原始對象)。 具體構件(Con ...
  • 我們首先來思考一個問題:作為工程師,我們的價值是什麼? 筆者認為是—— 解決用戶問題 。 我們的任何知識和技能,如果不能解決特定的問題,那麼就是無用的屠龍之術;我們的任何經驗,如果不能對解決新的問題有用,那這經驗就是過時的。工程師不是空談者,也不是理論家,再好的理論,再好的設計,不能落地變成產品,不 ...
  • 返回字元出現的第一個位置, 如果字元在被搜索字元串的開頭, 則會返回 ‘0’ 因此, 在使用此函數判斷 字元串是否包含 某一個字元時 使用: 1 ...
  • pom.xml(對Kaptcha.jar的引用) spring-mvc.xml(Kaptche的相關設置) BaseController.java(驗證碼獲取Controller) 前臺js(初始化驗證碼圖片) 當寫完前臺代碼,訪問login.jsp時驗證碼獲取失敗(Status Code:302 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...