Java實現解析並生成xml原理實例詳解

推薦閱讀:阿里P8架構師談:工作1-5年的Java工程師,怎樣提高核心競爭力

                  阿里架構師直言:“沒有實戰都是紙上談兵”!Redis實戰PDF分享

                  奮發圖強半年多,終於四面阿里如願拿到心儀offer定級P7

這篇文章主要介紹了Java實現解析並生成xml原理實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

 

XML解析:

  • * 解析xml可以做:
  • * 如果xml作爲配置文件:讀取
  • * 如果xml作爲傳輸文件:寫,讀

xml解析思想:

  • * DOM:將文檔加載進內存,形成一顆dom樹(document對象),將文檔的各個組成部分封裝爲一些對象。
  • * 優點:因爲,在內存中會形成dom樹,可以對dom樹進行增刪改查。
  • * 缺點:dom樹非常佔內存,解析速度慢。

Document
Element
Text
Attribute
Comment

* SAX:逐行讀取,基於事件驅動
* 優點:不佔內存,速度快
* 缺點:只能讀取,不能回寫

xml常用的解析器:

  • * JAXP:sun公司提供的解析。支持dom和sax。(不常用)
  • * JDOM:
  • * DOM4J:dom for java民間方式,但是是事實方式。非常好。 支持dom

1.導入jar包 dom4j.jar

2.創建解析器

SAXReader reader = new SAXReader();

3.解析xml 獲得document對象

Document document = reader.read(url);

  • * XPATH:專門用於查詢
  • * 定義了一種規則。
  • * 使用的方法:
  • * selectSingleNode():
  • * selectNodes():

使用步驟:

1、注意:要導包 jaxen...jar

2、創建解析器

SAXReader reader = new SAXReader();

3、解析xml 獲得document對象

Document document = reader.read(url);

* 解析XML:

// 1、得到某個具體的節點內容:第2本書的書名--》葵花寶典

// 2、遍歷所有元素節點

XPath:

  • // nodename 選取此節點。
  • // / 從根節點選取。
  • // // 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
  • // .. 選取當前節點的父節點。
  • // @ 選取屬性。
  • // [@屬性名] 屬性過濾
  • // [標籤名] 子元素過濾

例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

/* demo.xml

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

<books>

  <book name="Harry Potter">

    <author>J.K. Rowling</author>

    <price>29.90$</price>

  </book>

  <book name="冰與火之歌">

    <author>馬丁</author>

    <price>28.90$</price>

  </book>

</books>

*/

@Test

public void test1() throws DocumentException{

  SAXReader reader = new SAXReader();

  Document doc = reader.read("./src/demo.xml");

  Element root = doc.getRootElement();

  Element book1 = root.element("book");

  System.out.println(book1.getPath());

  System.out.println(book1.elementText("price"));

  List<?> list = root.elements("book");

  Element book2 = (Element) list.get(1);

  System.out.println(book2.attributeValue("name"));

  for(Iterator<?> it = book1.elementIterator();it.hasNext() ; ){

    Element ele = (Element) it.next();

    System.out.println(ele.getName()+" : "+ele.getText());

  }

}

 

@Test

public void test2() throws Exception{//使用 XPath,只用於快速查詢,需要用jaxen...jar包

  SAXReader reader = new SAXReader();

  Document doc = reader.read(new File("src/demo.xml"));

  Node node = doc.selectSingleNode("/books/book[2]/author");//需要jaxen.jar包

  String s = node.getText();

  System.out.println(s);

  node = doc.selectSingleNode("/books/book[2]/@name");

  s = node.getText();

  System.out.println(s);

   

  List<Node> booknames = doc.selectNodes("/books//@name");

  for (Node node1 : booknames) {

    System.out.println(node1.getText());

  }

   

  List<?> nodes = doc.selectNodes("/books/*/*");

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

    Node node1 = (Node) nodes.get(i);

    System.out.println(node1.getName() + ": " + node1.getText());

  }

}

以上就是本文的全部內容,希望對大家的學習有所幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章