Java---XML的解析(1)-DOM解析

      網友投稿 809 2025-03-31

      本章只講DOM解析。接下來還會學習Dom4j和StAX 解析技術

      DOM解析:

      DOM解析一次將所有的元素全部加載到內存中:如有以下XML文檔:

      Jack 30

      1

      2

      3

      4

      由于DOM解析,一次性的將所有元素(包含屬性和文本) 全部加載到內存中,所以不適用于解析大量的數據。

      JAXP-DOM解析:

      包:

      javax.xml.parse – 關鍵類DocumentBuilder,文檔解析對像。

      org.w3c.dom – 關鍵類Document代表內存中的文檔對像模型。

      java.xml – 關鍵類Transformer,用于將內存中的文檔保存到文件中。

      users.xml:-在xml4文件夾下面

      Tom 23 李四 33

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      代碼演示:

      package cn.hncu.dom; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * @author 陳浩翔 2016-6-29 */ public class DomDemo1 { @Test // 需求:把第一個user節點的name的值取出來 public void getDom() throws SAXException, IOException, ParserConfigurationException { // 第一步,通過DocumentBuilderFactory類中的工廠方法等到一個dbf對象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 第二步,通過dbf對象創建出一個DocumentBuilder對象 DocumentBuilder db = dbf.newDocumentBuilder(); // 第三步,通過db對象創建出一個Document對象 Document dom = db.parse("xml4/users.xml"); // db.parse( new File("xml4/users.xml") );//也可以 System.out.println(dom);// [#document: null] Node root = dom.getFirstChild();// 這個是根節點 System.out.println("root:" + root);// root:[users: null] System.out.println(root.getNodeName());// users System.out.println(root.getFirstChild().getNodeName());// #text // 上面一句的輸出是:#text ----dom中把空白符也看成是一個Node,這種情況對我們的解析通常會造成很大的麻煩 // ※※為解決上面的問題,我們以后解析時盡量不要用Node,而要用Element。 // 因為Element是元素它不包含屬性和文字內容(包括空白符),因此可避開空白符的干擾 Element eRoot = (Element) root; NodeList list = eRoot.getElementsByTagName("user"); System.out.println("user元素的數量:" + list.getLength()); System.out.println("第2個user元素" + list.item(1)); Node user1Node = list.item(0); Element eUser1 = (Element) user1Node;// 要把Node強轉成Element,因為Element是子接口,里面有getElementBy*等方法,而Node沒有(只能采用childNodes的方式,這種方式會受空白符的干擾) NodeList listNames = eUser1.getElementsByTagName("name"); String nm = listNames.item(0).getNodeName();// name--標簽名 String nmVal = listNames.item(0).getTextContent();// 標簽內部所包含的文本內容----相當于JavaScript中的innerText System.out.println(nm + "," + nmVal); } @Test //需求:把第二個user節點的age值取出來 public void getAge()throws Exception{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.parse(new File("xml4/users.xml")); Element root = (Element)dom.getFirstChild(); Element user2 = (Element)root.getElementsByTagName("user").item(1); Element eAge = (Element)user2.getElementsByTagName("age").item(0); String age = eAge.getTextContent(); System.out.println("age:"+age); } //用java對xml文檔進行CRUD---創建,遍歷,更新,刪除 //創建---需求:添加一個新的user @Test public void create() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse(new File("xml4/users.xml")); Element root = (Element) dom.getFirstChild(); //創建一個新的user元素 Element eUserNode = dom.createElement("user"); eUserNode.setAttribute("id", "C001");//給元素添加屬性 //創建name和age子元素 Element eName = dom.createElement("name"); eName.setTextContent("李四");//設置name標簽容器中包含的文字 Element eAgeNode = dom.createElement("age"); eAgeNode.setTextContent("33"); //把所創建的元素組裝成一顆子樹,添加到整顆dom樹上 eUserNode.appendChild(eName); eUserNode.appendChild(eAgeNode); root.appendChild(eUserNode); //再把當前內存中的dom對象存儲進xml文件 TransformerFactory tf = TransformerFactory.newInstance(); Transformer trans = tf.newTransformer(); trans.transform(new DOMSource(dom), new StreamResult("xml4/users.xml")); } //遍歷---查找 @Test public void query() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse("xml4/users.xml"); Element root = (Element) dom.getFirstChild();//得到根節點 NodeList list = root.getElementsByTagName("user");//這個user是xml文檔中的元素 for(int i=0;i

      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

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      Java---XML的解析(1)-DOM解析

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      152

      153

      154

      155

      156

      157

      158

      159

      160

      161

      162

      163

      164

      165

      166

      167

      168

      169

      170

      171

      172

      173

      174

      175

      176

      177

      178

      179

      180

      181

      小知識點:

      注意:子類才可以當父類用。

      父類的話,如果你確定那個類一定是這個父類的某個子類了,才可以強轉為子類?。?!

      Java XML

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:點擊了云服務中的劃詞翻譯沒反應
      下一篇:excel圖表怎么阻止用戶修改工作表的名稱
      相關文章
      亚洲伦乱亚洲h视频| 亚洲国产精品无码第一区二区三区| 亚洲综合国产成人丁香五月激情| 亚洲国产精品久久久久网站| 国产亚洲av片在线观看播放 | 亚洲国产日韩在线观频| 亚洲AV无码国产一区二区三区| 亚洲熟伦熟女专区hd高清| 亚洲午夜理论片在线观看| 亚洲一线产品二线产品| 亚洲精品一二三区| 亚洲人成色在线观看| 蜜芽亚洲av无码一区二区三区 | 亚洲成熟丰满熟妇高潮XXXXX| 亚洲欧洲无卡二区视頻| 亚洲国产aⅴ成人精品无吗| 亚洲av无码专区在线电影| 亚洲AV无码之国产精品| 亚洲av日韩av欧v在线天堂| 亚洲 无码 在线 专区| 亚洲中文字幕无码专区| 亚洲人成网77777亚洲色| 亚洲国产成人一区二区精品区| 亚洲av成人无码久久精品| 2022年亚洲午夜一区二区福利| 久久亚洲精品无码VA大香大香| 亚洲小说区图片区| 中文文字幕文字幕亚洲色| 亚洲女女女同性video| 国产成人+综合亚洲+天堂| 亚洲精品无码永久在线观看| 在线亚洲午夜理论AV大片| 亚洲国产精品无码中文字| 久久久久亚洲AV无码麻豆| 91嫩草亚洲精品| 亚洲乱人伦中文字幕无码| 亚洲高清偷拍一区二区三区| 国产亚洲精品线观看动态图| 亚洲AV永久无码精品一百度影院 | 久久精品亚洲中文字幕无码麻豆| 亚洲春黄在线观看|