jdom利用純java技術對xml文檔進行解析、生成、序列化等各種操作

Jdom對xml文檔進行解析、生成、序列化等各種操作。

使用jdom之前,首先要導入jar包:jdom.jar?
獲得根元素:

//首先確定xml文件位置

?? ??? ?String xmlPath = "./src/ceshi/Test.xml";
?? ??? ?//使用的解析器,這里表示默認的解析器
?? ??? ?SAXBuilder builder = new SAXBuilder(false);
?? ??? ?try {
?? ??? ??? ?//得到Document,以后的操作都是Document操作的
?? ??? ??? ?Document document = builder.build(xmlPath);
? ? ? ? ? ? //得到根元素
?? ??? ??? ?Element root = document.getRootElement();
?? ??? ??? ?} catch (JDOMException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}?

Jdom得到的所有的節點,都是org.jdom.Element類,他的子節點也是org.jdom.Element類,得到的root是Element對象,直接輸出System.out.println(root);顯示:

[Element: <books/>]

Element的常用方法:

1、String ?getName() ?返回Element類的名稱?

System.out.println(root.getName()); 結果 :books

2、String ?getAttributeValue(Stringname) ? 獲得屬性值

System.out.println(root.getAttributeValue("size")); ?結果:3

3、setAttribute(String name,String value) ? 設置屬性值

4、removeAttribute(String name) ?刪除屬性

5、getAttributes().clear() ?清空所有屬性

6、String ?getText() ?獲得Element(當前節點)的值,當前節點必須是最后一級節點,否則返回空。

7、String ?getTextTrim() ?與getText()相同,只是去掉兩邊的空格

8、String ?setText(String ?name) ?改變Element(當前節點)的值,當前節點必須是最后一級節點。這個只是對document的修改,并沒有對實際的xml文檔修改。若要修改實際的文檔,需要使用XMLOutputter:

XMLOutputter outputter=new XMLOutputter();

outputter.output(document,new FileOutputStream(xmlPath));

9、Element ?getChild(String ?name) ?獲得指定名稱的第一個元素

10、 ? ? ? ? removeChildren(String ?name) ?刪除名稱為name的子元素

11、 ? ? ? ? addContent(Element ?e) ? 增加節點

?

?獲得子元素值:

//獲得根元素
? ?
輸出為:

? ? ?Elementroot = document.getRootElement();
? ? ? ? ?//通過根元素,獲得book元素
? ? ? ? ?Elementbook = root.getChild("book");
? ? ? ? ?//獲得book元素的name節點的值(name節點必須為最底層元素,否則返回空)
? ? ? System.out.println(book.getChildTextTrim("name"));?

java開發

getChild()獲得的是第一個元素。
獲得所有屬性:

節點可以獲得自己的屬性,對所有的屬性進行遍歷,然后轉換為屬性類型:

Attribute att = (Attribute) root.getAttributes().get(0);
?? ??? ?//獲得屬性名稱
?? ??? ?System.out.println(att.getName());
?? ??? ?//獲得屬性值
?? ?System.out.println(att.getValue());?

獲得子節點集合:
1、 獲得所有子節點

List childrens =root.getChildren();

? ? ? ? for(int i=0;i<childrens.size();i++){

? ? ? ? ? ?System.out.println(childrens.get(i));

? ? ? ?}

?

通過root.getChildren()得到的是一個List集合,集合中是Element對象:

[Element: <book/>]

[Element: <book/>]

[Element: <book/>]

得到的集合中的Element對象,需要進行類型轉換才能作為Element操作:

Element child0 = (Element) childrens.get(0);

System.out.println(child0.getName());

例如,對books所有子節點book遍歷屬性:

List childrens = root.getChildren();

for(inti=0;i<childrens.size();i++){

Element child= (Element) childrens.get(i);

System.out.println(child.getAttributeValue("author"));}

?

2、 獲得指定名稱的子節點

可以通過名稱獲得子節點,得到的同樣是Element集合,并且是所有的名稱為“name”的集合:

List childrens = book.getChildren("name");

生成xml文檔:
使用java定義各個節點以及屬性,然后生成xml文檔:

//定義所有節點
?? ??? ?Element root,student,number,name,age; ? ? ? ?
?? ??? ?Element student2,number2,name2,age2; ?
?? ??? ?
?? ??? ?//生成根元素:student-info
? ? ? ? root = new Element("student-info");?
? ? ? ??
? ? ? ? //生成元素:student(number,name,age) ? ? ?
? ? ? ? student = new Element("student"); ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? number = new Element("number");
? ? ? ? name = new Element("name");
? ? ? ? age = new Element("age");
? ? ? ? //生成元素:student2(number,name,age) ? ? ?
? ? ? ? student2 = new Element("student2"); ? ? ? ? ? ? ??
? ? ? ? number2 = new Element("number2");
? ? ? ? name2 = new Element("name2");
? ? ? ? age2 = new Element("age2");
? ? ? ? //將根元素植入文檔doc中
? ? ? ? Document doc = new Document(root);?
? ? ? ??
? ? ? ? //分別將兩個student賦值,然后分別加載到root上
? ? ? ? number.setText("001");
? ? ? ? name.setText("zs");
? ? ? ? age.setText("24");
? ? ? ? number2.setText("002");
number2.setAttribute(new Attribute("name","fxt"));//屬性
? ? ? ? name2.setText("ls");
? ? ? ? age2.setText("50");
? ? ? ? student.addContent(number);
? ? ? ? student.addContent(name);
? ? ? ? student.addContent(age);
? ? ? ? student2.addContent(number2);
? ? ? ? student2.addContent(name2);
? ? ? ? student2.addContent(age2);
? ? ? ? root.addContent(student);
? ? ? ? root.addContent(student2);
? ? ? ??
? ? ? ? //定義格式:字符為gb2312,縮進為4個空格(若Format報錯,說明版本太低,下載最新jdom.jar即可)
? ? ? ? Format format = Format.getCompactFormat();
? ? ? ? format.setEncoding("gb2312");?
? ? ? ? format.setIndent(" ? ?");?
? ? ? ??
? ? ? ? //輸出新文件,若已存在,則覆蓋
? ? ? ? XMLOutputter XMLOut = new XMLOutputter(format);
? ?XMLOut.output(doc, new FileOutputStream("./src/ceshi/jdomTest2.xml"));??

?

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

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

相關文章

KMP算法數組下標從0和數組下標從1開始

我在運用KMP時&#xff0c;總時會搞混如果數組下標為0時要如何用寫&#xff0c;下標為1時要如何寫。 當下標為0時kmp void kmp(int len) {//下標為0 時vector<int> f(n,-1);for(int i 1;i < len;i){ // 每次更新的是 下標i // 當第 i1不匹配是 跳到 f[i]的位置上&…

106.進程控制(結束、孤兒、僵尸進程)以及進程回收

目錄 結束進程 孤兒進程 僵尸進程 進程回收 wait() waitpid 進程控制是指在操作系統中對進程進行創建、終止、掛起、喚醒以及進程之間的同步、通信等操作的管理。 結束進程 exit() 和 _exit() 函數都用于終止一個進程&#xff0c;但它們之間有一些重要的區別&#xf…

新工科:數據科學與大數據技術實驗中心解決方案,賦能高校新工科數智人才培養

隨著數字經濟蓬勃發展&#xff0c;數字化產業和產業數字化成為就業增長新動能。據人瑞人才與德勤調研顯示&#xff0c;未來3年&#xff0c;數字產業化企業最需要運營人員和開發人員&#xff08;包括大數據開發工程師、數據建模開發工程師等&#xff09;&#xff0c;其次是數據分…

【RTOS學習】FreeRTOS中的鏈表 | 堆的管理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;專欄&#xff1a;《RTOS學習》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交給時間&#xff01; 目錄 &#x1f969;FreeRTOS中的鏈表&#x1f95e;初始化&#x1f95e;尾部插入&#x1f95e;按順…

OpenWRT搭建本地web站點并結合內網穿透實現公網遠程訪問

文章目錄 前言1. 檢查uhttpd安裝2. 部署web站點3. 安裝cpolar內網穿透4. 配置遠程訪問地址5. 配置固定遠程地址 前言 uhttpd 是 OpenWrt/LuCI 開發者從零開始編寫的 Web 服務器&#xff0c;目的是成為優秀穩定的、適合嵌入式設備的輕量級任務的 HTTP 服務器&#xff0c;并且和…

【Windows】MCSM面板搭建Mycraft服務器,實現公網遠程聯機

文章目錄 前言1.Mcsmanager安裝2.創建Minecraft服務器3.本地測試聯機4. 內網穿透4.1 安裝cpolar內網穿透4.2 創建隧道映射內網端口 5.遠程聯機測試6. 配置固定遠程聯機端口地址6.1 保留一個固定TCP地址6.2 配置固定TCP地址 7. 使用固定公網地址遠程聯機 前言 MCSManager是一個…

[香橙派]Orange pi zero 3命令行配網方法——建立ssh連接——Ubuntu配置WIFI自動連接

一、前言 前面我們給Orange Pi安裝了Ubuntu系統&#xff0c;并通過MobaXterm進行了串口連接&#xff0c;但其實并不方便&#xff0c;在日常開發中&#xff0c;我們希望能夠使用更方便的ssh連接來進行操作&#xff0c;因此配置網絡是必要的。 本章介紹的方法無需網線、HDMI線等&…

upload-labs

01 隨便上傳個文件 發現對于上傳類型有限制 查看頁面代碼發現是js的過濾直接關閉js 上傳成功 右鍵圖片在新建標簽頁打開文件 這里直接抓包改名字也行 02 抓包修改后綴名 03 發現后端做了檢測抓包修改失敗 大小寫繞過失敗&#xff0c;php特性php1等會被當成php執行 這里圖片的…

私域流量:探索營銷新紀元的高效之路

在當前的數字營銷領域&#xff0c;私域流量已經嶄露頭角&#xff0c;成為企業和品牌爭相追逐的新路徑。私域流量指的是企業或品牌通過自有渠道&#xff0c;如網站、APP、微信公眾號等&#xff0c;直接觸達的用戶流量。這種流量具有更高的自主性和可控性&#xff0c;對于提升營銷…

MS1242,替代ADS1242,24bit 高精度、低功耗模數轉換器

產品簡述 MS1242/MS1243 是一款高精度、寬動態范圍、 ?-Σ 模數轉 換芯片&#xff0c;其工作電壓為 2.7V 至 5.25V &#xff0c;可以達到 24bit 無失碼轉 換&#xff0c;有效精度可達 21bit 。 MS1242/MS1243 可以廣泛使用在工 業控制、稱重、液體 / 氣體化學分析、血液分…

spark 寫入 hudi時數據類型報錯

報錯信息如下&#xff1a; Caused by: org.apache.spark.sql.execution.QueryExecutionException: Parquet column cannot be converted in file hdfs://master:9000/user/hive/warehouse/ods_ds_hudi.db/order_info/19971201/77687054-08d3-4045-9529-1ca38e7de10b-0_0-65-57…

selenium相關地址匯總

webdriver下載 Chrome瀏覽器驅動下載地址&#xff1a;https://chromedriver.storage.googleapis.com/index.html Edge瀏覽器驅動下載地址&#xff1a;https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver) 或 https://msedgewebdriverstorage.z22.web.cor…

手眼標定 - 最終精度和誤差優化心得

手眼標定 - 標定誤差優化項 一、TCP標定誤差優化1、注意標定針擺放范圍2、TCP標定時的點次態與工作姿態盡可能保持相近 二、深度相機對齊矩陣誤差1、手動計算對齊矩陣 三、手眼標定拍照姿態1、TCP標定姿態優先2、水平放置棋盤格優先 為減少最終手眼標定的誤差&#xff0c;可做或…

Get職場新知識:做分析,用大數據分析工具

為什么企業每天累積那么多的數據&#xff0c;也做數據分析&#xff0c;但最后決策還是靠經驗&#xff1f;很大程度上是因為這些數據都被以不同的指標和存儲方式放在各自的系統中&#xff0c;這就導致了數據的分析口徑和標準不一致&#xff0c;無法在同一個分析軟件上做綜合分析…

Rsync+Sersync

服務器相關參數 源服務器 192.168.17.101 目標服務器&#xff08;同步到的服務器&#xff09; 192.168.17.103 ##目標服務器配置 ###1、配置rsync服務 1、安裝rsync yum -y install rsync 2、配置rsync vim /etc/rsyncd.conf 配置文件內容 uid root gid root use c…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【問題解決了&#xff0c;我很不…

bootstrap:選項卡功能DEMO

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>選項卡</title> <link rel"stylesheet" type"text/css" href"/cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css" />…

記一次測試環境git翻車經歷

本來想拉一個功能分支進行新的功能開發&#xff0c;合并代碼發現沒有沖突居然有文件被修改了&#xff0c;貿然選擇最近的一次回滾提交&#xff0c;沒想到不假思索的push -f 導致一部分dev主干的代碼不見了。 事故記錄 開發分支origin/dev&#xff0c;功能分支file 合并之后發…

Java 實現 文檔 添加 水印 工具類

一、pom 文件引用 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>…

MeterSphere實戰(一)

MeterSphere是一位朋友講到的測試平臺&#xff0c;說這東西是開源的&#xff0c;因為我是做測試的&#xff0c;很樂意了解一些新鮮事物。在我看來&#xff0c;測試就是要專注一些領域&#xff0c;然后要啥都會一點點&#xff0c;接著融會貫通起來&#xff0c;這樣就可以萬變不離…