(五)DOM4j進行XML文件的解析及生成

DOM4j本身還是需要使用SAX建立解析器,然后通過文檔依次找到根節點,再通過根節點查找每一個節點的內容.

1.寫操作

import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

?public static void main(String[] args) {
  // 1.創建文檔
  Document doc = DocumentHelper.createDocument();
  // 2.定義節點及子節點
  Element addresslist = doc.addElement("addresslist");
  Element linkman = addresslist.addElement("linkman");
  // 定義子節點
  Element name = linkman.addElement("name");
  Element email = linkman.addElement("email");

  // 3.設置節點內容
  name.setText("祖國");
  email.setText("mxzer3200@126.com");

  // 4.設置輸出格式
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("GBK"); // 設置輸出編碼
  // 輸出xml
  try {
    XMLWriter writer = new XMLWriter(new FileOutputStream(new File("e:"+ File.separator + "dom4j2.xml")), format);
    writer.write(doc);
    writer.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

生成的xml文件已格式排列的:

?

?

?

2.讀操作

/**
* 讀操作
* 使用SAX建立解析器,然后通過文檔依次找到根節點,然后通過根節點找到每一個節點的內容。
*/
public static void main(String[] args) {
  // 1.讀取文件
  File file = new File("e:" + File.separator + "dom4j2.xml");
  // 2.建立SAX解析讀取
  SAXReader reader = new SAXReader();
  // 3.讀取文檔
  Document doc = null;
  try {
    doc = reader.read(file);
  } catch (DocumentException e) {
    e.printStackTrace();
  }
  // 4.獲取根元素
  Element root = doc.getRootElement();
  // System.out.println(root.getName());
  Iterator it = root.elementIterator(); // 獲取全部子節點
  while (it.hasNext()) {
    Element linkman = (Element) it.next();
    System.out.println("姓名:" + linkman.elementText("name"));
    System.out.println("郵箱:" + linkman.elementText("email"));
  }
}

?

3.解析xml方式2

<?xml version="1.0" encoding="UTF-8"?>
<Response service="ConfirmService">
  <Head>ERR</Head>
  <ERROR code="4001">系統發生數據錯誤或運行時異常</ERROR>
</Response>

String xml = "<?xml version=\'1.0\' encoding=\'UTF-8\'?><Response service=\"ConfirmService\"><Head>ERR</Head><ERROR code=\"4001\">系統發生數據錯誤或運行時異常</ERROR></Response>";
System.out.println(xml);
Map<String, String> map = parseXml(xml);
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
  Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
  System.out.println(entry.getKey() + ": " + entry.getValue());
}

/**
* 解析XML
* @param parseXml
* @return
*/
private static Map<String, String> parseXml(String parseXml) {
  Map<String, String> map = new HashMap<String, String>();
  String resultHeader = "";
  String errorCode = "";
  String errorDetail = "";

  try {
    // Parse Xml
    Document document = DocumentHelper.parseText(parseXml);
    // Parse Header
    List<Element> list = document.selectNodes("//" + "Head");
    if (list != null && list.size() > 0) {
      Element e = list.get(0);
      List<Element> els = e.elements();
      if (els.size() == 0) {
        resultHeader = e.getText().trim();
      }
    }
  // Parse Error
  list = document.selectNodes("//" + "ERROR");
  if (list != null && list.size() > 0) {
    Element e = list.get(0);
    List<Element> els = e.elements();
    if (els.size() == 0) {
      errorCode = e.attributeValue("code");
      errorDetail = e.getTextTrim();
    }
  }
  } catch (Exception e) {
    resultHeader = "ERR";
    errorCode = "9999";
    errorDetail = "XML解析錯誤:" + e.getMessage();
  }

  // Set Map
  map.put("header", resultHeader);
  map.put("errCode", errorCode);
  map.put("errDetail", errorDetail);
  return map;
}

?

轉載于:https://www.cnblogs.com/mxzer/p/6423066.html

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

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

相關文章

Linux系統基礎.作業

要求以root用戶登錄系統&#xff0c;右擊桌面打開終端&#xff0c;查看當前登陸Linux系統所使用的用戶名 查看哪些用戶在系統上工作 修改當前時間為2018年8月26號11:28 查看2015年10月份日歷 使用兩種方法查看ls命令的使用說明 清除屏幕 ctrlL使用“useradd tom”命令新建tom用…

Alsa中PCM參數設置

分類&#xff1a; LINUX 1) PCM設備的句柄.2) 指定同時可供回放或截獲的PCM流的方向3) 提供一些關于我們想要使用的設置選項的信息,比如緩沖區大小,采樣率,PCM數據格式等4) 檢查硬件是否支持設置選項.4.1) 初始化PCM變量4.2) 分配hwparams結構4.3) 打開PCM設備4.4) 以聲卡的全部…

java5

java基礎&#xff08;五&#xff09;命名規則&#xff1a; 名字中只能包含->字母、_、數字、$&#xff0c;且開頭不能為數字包名必須都小寫文件名首字母和后面英文文件單詞首字母都要大寫變量和方法名 首字母小寫&#xff0c;后面英文單詞首字母大寫java中的方法&#xff1a…

最新歷史版本 :H.265

原來對264有深入的研究&#xff0c;現在想詳細了解下265啦&#xff0c;愿265盡快廣泛的使用起來&#xff0c;人們可以享受無處不在的視覺盛宴。 H.265是ITU-T VCEG 繼H.264之后所制定的新的視頻編碼標準。H.265標準圍繞著現有的視頻編碼標準H.264&#xff0c;保留原來的某些技術…

凱撒密碼、GDP格式化輸出、99乘法表

1.愷撒密碼的編碼 sinput(請輸入明文:) print(密文為:) for i in s:print(chr(ord(i)3),end)運行結果為&#xff1a; 2.國家名稱 GDP總量&#xff08;人民幣億元&#xff09; 中國 &#xffe5;765873.4375 澳大利亞 &#xffe5; 78312.4375 &#xff08;國家名稱左對齊&am…

【BZOJ3453】XLkxc [拉格朗日插值法]

XLkxc Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss]Description 給定 k,a,n,d,p  f(i)1^k2^k3^k......i^k  g(x)f(1)f(2)f(3)....f(x)  求(g(a)g(ad)g(a2d)......g(and))mod p Input 第一行數據組數&#xff0c;(保證小于6)  以下每行四個整數 …

hive安裝

雷頓學院大數據雷頓學院大數據&#xff1a;http://www.leidun.site/hive安裝下載hivehttp://mirror.bit.edu.cn/apache/hive/下載后解壓配置命令將hive加入命令vim ~/.bash_profile添加如下命令export HIVE_HOME/usr/local/Cellar/hive/1.2.1/libexec保存文件mysql數據庫驅動cu…

JavaFX常用匯總

1. 描述備注 1.1 參考教程 博客 易百教程 JavaFX中國 1.5 安裝 a). 在線安裝e(fx)clipse插件 b). 下載安裝SceneBuilder c). eclipse重啟以后,windows->preference->javaFx->SceneBuilder executable選擇 上一步中安裝后的exe文件 2. 快速入門示例-MVC a). *.fxml文件…

Alsa驅動分析(轉)

1. Abstract 2. Introduction 3. 音頻驅動框架介紹 3.1 音頻設備的注冊 3.2 音頻驅動的注冊 3.2.1 Probe函數的調用 3.2.2 Soc_probe函數 4. 通常的使用流程的分析 4.1.1 open過程介紹 4.1.2 snd_pcm_hw_params流程分析 4.1.3 …

bzoj2744[HEOI2012]朋友圈

題目鏈接&#xff1a;bzoj2744 題目大意&#xff1a; 兩個國家看成是AB兩國&#xff0c;現在是兩個國家的描述&#xff1a; 1.A國&#xff1a;每個人都有一個友善值&#xff0c;當兩個A國人的友善值a、b&#xff0c;如果a xor b mod 21&#xff0c;那么這兩個人都是朋友&#x…

Linux之父為過去的言行道歉,宣布離開社區反思

9月17日&#xff0c;Linux 4.19-rc4發布&#xff0c;成為Linux 4.19最新的開發測試內核。這是現階段一個相當常規的內核更新&#xff0c;但令人震驚的是&#xff0c;Linux之父Linus Torvalds宣布將暫時離開內核維護社區&#xff0c;Greg Kroah-Hartman將接管接下來的Linux 4.19…

[BZOJ] 1620: [Usaco2008 Nov]Time Management 時間管理

1620: [Usaco2008 Nov]Time Management 時間管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 850 Solved: 539[Submit][Status][Discuss]Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs con…

面試-接口和純虛類的區別

相關資料&#xff1a;1.https://zhidao.baidu.com/question/91157279.html 純虛類:1.一個子類只能繼承一個抽象類&#xff08;虛類&#xff09;。2.一個抽象類可以有構造方法。 3.一個抽象類中的方法不一定是抽象方法&#xff0c;即其中的方法可以有實現&#xff08;有方法體&a…

TCP研究

tcp協議本身是可靠的,并不等于應用程序用tcp發送數據就一定是可靠的.不管是否阻塞,send發送的大小,并不代表對端recv到多少的數據 在阻塞模式下, send函數的過程是將應用程序請求發送的數據拷貝到發送緩存中發送并得到確認后再返回.但由于發送緩存的存在,表現為:如果發送緩存大…

DDR工作原理

DDR SDRAM全稱為Double Data Rate SDRAM&#xff0c;中文名為“雙倍數據流SDRAM”。DDR SDRAM在原有的SDRAM的基礎上改進而來。也正因為如此&#xff0c;DDR能夠憑借著轉產成本優勢來打敗昔日的對手RDRAM&#xff0c;成為當今的主流。本文只著重講講DDR的原理和DDR SDRAM相對于…

8.1 文件查找local;find使用

文件查找&#xff1a; 在文件系統上查找符合條件的文件。 文件查找&#xff1a;locate, find 非實時查找(數據庫查找)&#xff1a;locate實時查找&#xff1a;find locate 1 查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db2 依賴于事先構建的索引 索引的構建是在…

hdu 5273 Dylans loves sequence 逆序數 區間dp

點擊打開鏈接 題意&#xff1a;給n個數&#xff0c;q次詢問&#xff0c;&#xff08;L&#xff0c;R&#xff09;區間內的逆序數。 思路&#xff1a; 區間dp 代碼一&#xff1a; 1 #include <bits/stdc.h>2 using namespace std;3 typedef long long ll;4 const int maxn…

python第三天習題

# 1. 文件a.txt內容&#xff1a;每一行內容分別為商品名字&#xff0c;價錢&#xff0c;個數&#xff0c;求出本次購物花費的總錢數# apple 10 3# tesla 100000 1# mac 3000 2# lenovo 30000 3# chicken 10 3## 2. 修改文件內容&#xff0c;把文件中的alex都替換成SB# with ope…

智能故事機方案簡介

智能故事機&#xff0c;又叫WiFi故事機&#xff0c;AI故事機&#xff0c;通過WiFi聯網&#xff0c;用戶語音就可以跟它進行問答、點歌等互動&#xff1b;由于聯網所以可以播放云端海量的兒童音頻內容&#xff1b;手機端在微信公眾號或者專屬APP上操作&#xff0c;可以點播相應內…

使用setsockopt()接口,設置TCP的接收與發送超時,Invalid argument錯誤問題

使用TCP套接字時&#xff0c;當無網絡連接時&#xff0c;還會繼續send&#xff0c;繼續recv阻塞&#xff0c;知道TCP自己協議機制判斷斷開連接時才會停止發送和接收&#xff0c;時間需要幾分鐘之久。解決的辦法是&#xff0c;自己設置接收超時時間&#xff0c;當超時后重新發送…