java基礎之XML

目錄

  • 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.XMLWriterxml寫入類
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>

轉載于:https://www.cnblogs.com/huizhipeng/p/10100113.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CF176E Archaeology(set用法提示)

題目大意&#xff1a; 給一棵樹&#xff0c;每次激活或熄滅一個點&#xff0c;每次問這些點都聯通起來所需的最小總邊權 分析&#xff1a; 若根據dfs序給所有點排序&#xff0c;為$v1,v2,v3....vk$&#xff0c;那么答案就是$(dis(v1,v2)dis(v2,v3)...dis(vk-1,vk)dis(vk,v1))/2…

網上整理的對于Rest和Restful api的理解 - 那啥快看 - 博客園

一、什么是Rest? REST不是"rest"這個單詞&#xff0c;而是幾個單詞縮寫 -- REpresentational State Transfer 直接翻譯&#xff1a;表現層狀態轉移&#xff0c;但這個翻譯正常人根本看不懂&#xff0c;找到的一種最好理解的說法是&#xff0c;URL定位資源&#xff…

P1101 單詞方陣(DFS)

題目描述 給一n \times nnn的字母方陣&#xff0c;內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 88個方向的任一方向&#xff0c;同一單詞擺放時不再改變方向&#xff0c;單詞與單詞之間可以交叉,因此有可能共用字母。輸出時&#xff0c;…

企業級rancher搭建Kubernetes(采用rancher管理平臺搭建k8s)

一、簡介 Rancher簡介 來源官方&#xff1a;https://www.cnrancher.com/ Rancher是一個開源的企業級容器管理平臺。通過Rancher&#xff0c;企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部…

[工具]java_sublime的快速使用

目錄 使用 : 怎么運行: 調整字體: 使用 : 新建--->寫好代碼后-->另存為尾綴是.java的文件 怎么運行: 在你另存為的目錄下cmd調用控制臺輸入dos指令--->執行javac 文件名.java(有.java尾綴)(編譯為.class文件)--->java 文件名(沒有.class尾綴設計者認為執行的是…

基于SOA的銀行系統架構

Part-1 【簡述】 1.通過引入面向服務架構&#xff08;SOA&#xff09;&#xff0c;企業服務總線&#xff08;ESB&#xff09;&#xff0c;適配器&#xff08;Adapter&#xff09;及面向構件等技術&#xff0c;嘗試打造一個統一業務流程服務平臺&#xff0c;實現面向流程的服務…

一次前后端分離的實踐

前后端分離該如何做? 這個問題&#xff0c;不同的技術人員&#xff0c;由于所處的崗位不一樣&#xff0c;給出的答案都不一樣。 前后端分離的問題&#xff0c;不僅僅是技術上的選型問題&#xff0c;還涉及到整個團隊在認知、職責、流程上面重新定義的問題&#xff0c;這也是為…

queryList爬蟲獲取內容的幾種方法總結 queryList給抓取的內容增加html追加元素html 代碼實例...

//簡略內容: 1. $data1 $ql->find(.two img)->map(function($item){return $item->alt; }); // 等價下面這句話 $data2 $ql->find(.two img)->attrs(alt);2. $texts $ql->find(.two>a)->texts(); $htmls $ql->find(#one span)->htmls();3. $…

C++解析-外傳篇(1):異常處理深度解析

0.目錄 1.異常的最終處理 2.結束函數terminate() 3.小結 1.異常的最終處理 問題&#xff1a; 如果在main函數中拋出異常會發生什么&#xff1f; 如果異常不處理&#xff0c;最后會傳到哪里&#xff1f; 下面的代碼的輸出什么&#xff1f; 示例——異常的最終處理&#xff1f;&a…

《淺談架構之路:前后端分離模式》 - 山人行 - 博客園

前言&#xff1a;分離模式 對前后端分離研究了一段時間&#xff0c;恰逢公司有一個大項目決定嘗試使用前后端分離模式進行&#xff0c;便參與其中。該項目從2016年初立項至今&#xff0c;平平穩穩得度過&#xff0c;但也涌現出越來越多的問題&#xff0c;絕對不是說前后端分離模…

springboot快速集成swagger

今天技術總監說&#xff1a;小明&#xff0c;我們本次3.0改造&#xff0c;使用swagger2.0作為前后端分離的接口規范&#xff0c;它可以一鍵生成前后端的API,一勞永逸……小明&#xff1a;&#xff1f;&#xff1f;&#xff1f; Spring Boot 框架是目前非常流行的微服務框架&…

php curl處理get和post請求

CURL 是一個利用URL語法規定來傳輸文件和數據的工具&#xff0c;支持很多協議&#xff0c;如HTTP、FTP、TELNET等。最爽的是&#xff0c;PHP也支持 CURL 庫。使用PHP的CURL 庫可以簡單和有效地去抓網頁。你只需要運行一個腳本&#xff0c;然后分析一下你所抓取的網頁&#xff0…

【Web】JavaWeb項目為什么我們要放棄jsp?為什么要前后端解耦?為什么要前后端分離?2.0版,為分布式架構打基礎。 - CSDN博客

前戲 前后端分離已成為互聯網項目開發的業界標準使用方式&#xff0c;通過nginxtomcat的方式&#xff08;也可以中間加一個nodejs&#xff09;有效的進行解耦&#xff0c; 并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務&#xff08;多種客戶…

MongoDB升級導致啟動失敗

起因 最近項目使用MongoDB,但是作為一個技術菜鳥&#xff0c;NoSQL數據庫我還真不會用&#xff0c;于是我就在自己的阿里云服務器上安裝了一個MongoDB4.0.9。 現象 但是當我使用yum -y update升級以后&#xff0c;MongoDB無法啟動了&#xff0c;即使重裝刪除了MongDB的文件了還…

測者的測試技術手冊:揭開java method的一個秘密--巨型函數

揭開java method的一個秘密&#xff1a;巨型函數 相信&#xff0c;很多人都不知道Java的Method的上限為64K。本文將超過這個上限的函數叫做巨型函數。 巨型函數的問題 1、如果代碼超過了這個限制&#xff0c;Java編譯器就報"Code too large to complier"的錯誤。 2、…

前端攻略系列(二) - 前端各種面試題

幸運且光榮的被老大安排了一個任務 - “去整理些前端面試題”。年前確實不是招人的好時候&#xff0c;所以我們前端團隊經過了超負荷的運轉&#xff0c;終于堅持過了春節。春節以后就開始招人啦&#xff0c;這套題考察的目標就是基礎基礎再基礎&#xff0c;嘿嘿。 事先聲明&…

html 初識

一、web請求流程模擬 python編寫的簡易服務器應用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

Iframe的那些事

在web開發中&#xff0c;經常會用到iframe&#xff0c;難免會碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中獲取iframe中的元素 1、 格式&#xff1a;window.frames["iframe的name值"].document.getElementByIdx_x(…

異常處理try...catch...throw

C 引入了異常處理機制。其基本思想是&#xff1a;函數 A 在執行過程中發現異常時可以不加處理&#xff0c;而只是“拋出一個異常”給 A 的調用者&#xff0c;假定為函數 B。 拋出異常而不加處理會導致函數 A 立即中止&#xff0c;在這種情況下&#xff0c;函數 B 可以選擇捕獲 …

Makefile 中:= ?= += =的區別

是最基本的賦值: 是覆蓋之前的值? 是如果沒有被賦值過就賦予等號后面的值 是添加等號后面的值轉載于:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/10118039.html