Java---XML的解析(2)-DOM4J解析/Xpath

      網友投稿 903 2025-03-31

      Dom4j:

      Dom SUN

      dom在加載時,將所有元素全部加載內存

      DOM4j - 第三方。

      Dom4j是一個開源、靈活的XML API。

      目前很多開源框架如struts,hibernate都使用dom4j做為解析其xml的工具。

      支持文檔的讀寫功能和Xpath快速查詢操作。

      這個需要我們自己把它的包導入myeclipse中的。

      準備DOM4j:

      包:dom4j.x.jar

      包結構:

      org.dom4j

      org.dom4j.io.SAXReader – xml文檔解析器

      org.dom4j.Document、Element – 文檔對像

      要知道的 Element的一些方法

      Element.element(“name”) –此元素下的第一個name元素。

      Element.elementIterator(“name”) – 此元素下的所有name元素。返回Iterator

      Element.getText() – 返回元素包含的文本。

      Element.getAttribute(“name”) – 返回名稱為name的屬性。

      Element.addElement(“name”); - 添加一個name元素,同時返回name元素本身。

      org.dom4j.io.XMLWriter – 將Document寫出的對像。

      DOM4J的層次圖:

      使用UTF-8編碼,解決中文亂碼:

      //聲明編碼格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); //保存(XMLWriter默認情況下即是使用UTF-8編碼。所以,如果使用OutputStream保存,且正好是UTF-8編碼,則不必擔心亂碼問題) XMLWriter xml = new XMLWriter(new FileOutputStream("./src/xml/a.xml"),format); xml.write(doc);

      Dom4j-保存節點-處理中文亂碼:

      在JavaIO中,writer總是本地編碼格式處理數據。即GB2312 所有,使用writer寫出數據有可能會發生一些問題,如保存不完整,或是亂碼: XMLWriter writer = new XMLWriter(new FileWriter(“a.xml”)); //寫出數據 writer.write(doc); 所以,建議在寫出數據時,使用OutputStream保存數據。

      記住:刪除一個節點時,要用它的父節點刪除它。

      添加或修改屬性的方法:addAttribute

      Dom4j-從沒有到有生成一個新的xml:

      //通過DocumentHelper在內存中創建一個Document Document doc = DocumentHelper.createDocument(); doc.setXMLEncoding(“UTF-8”);//XML的編碼格式 //生成一個節點,生成的第一個節點也是根節點,此方法只使用一次 Element root = doc.addElement(“users”);

      1

      2

      3

      4

      5

      Xpath

      XML PATH Language。 可以實現快速查詢。 XPATH包含 XPath 使用路徑表達式在 XML 文檔中進行導航 。 XPath 包含一個標準函數庫 準備Xpath的包: jaxen.jar Xpath通過以下方法使用 dom.selectNodes – 返回一個 List對像 dom.selectSingleNode – 返回一個Node對像 //以下選擇所有的user節點,處理不帶命名空間的安以下原則 List list = doc.selectNodes("http://user"); System.err.println(list.size()); //以下選擇所有name節點 list = doc.selectNodes("http://name");//或從要開始:/users//name System.err.println(list.size()); //以下選擇所在帶有country屬性的節點 list = doc.selectNodes("http://user[@country]"); System.err.println(list.size()); //選擇國家是 EN的節點,可以使用以下方法查詢用戶登錄 //如果country不能重復則可以使用selectSingleNode //使用雙引號或單引號都可以://user Node node = doc.selectSingleNode("http://user[@country=\"EN\"]"); System.err.println(node); Xpath通過查詢子元素的值,區別主要元素: 如:XML文檔如下: Oracle編程基礎 89.99 查詢包含Oracle一詞的所有book元素。 //book[name=‘Oracle’] //精確查詢子元素name的值為Oracle的book元素 //以下是模糊查詢 //book[contains(name,’Oracle’)] //也可以將name元素的值轉成小寫 //book[contains(fn:lower-case(name),’oracle’]

      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

      這個稍微了解一下:

      Xpath處理帶有命名空間的XML文檔:

      SAXReader sax = new SAXReader(); //聲明一個map用于保存命名空間 Map uris = new HashMap(); //給命名空間取一個別名 uris.put("a", "http://www.itcast.cn"); //設置命名空間后再讀取xml文檔 sax.getDocumentFactory().setXPathNamespaceURIs(uris); Document dom = sax.read("./xml2/a.xml"); //然后使用帶有命名空間的前綴查詢即可。 dom.selectNodes(“//a:book”); //帶有屬性的查詢同前 dom.selectNodes(//a:book[@id] //帶有元素的查詢必須要添加命名空間的前綴 dom.seletNodes(“//a:book[a:name=‘oralce’]”); //查詢子元素值為oracle的book元素

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      SAX,StAX讀取速度快。都是JAXP的成員。

      StAX-Iterator編程接口和Cursor編程接口。

      Dom4j。Dom。都會將所有節點加載加載到內存中。CRUD非常方便。

      Dom4j支持XPath.

      演示代碼:::

      package cn.hncu.dom4j; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import java.util.Scanner; 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; import org.junit.Test; public class Dom4jDemo { @Test public void readDemo() throws Exception{ //聲明SAXReader核心讀取(xml)類,并獲得dom對象 SAXReader sax = new SAXReader(); Document dom = sax.read("xml5/users.xml"); //獲取根節點 Element root = dom.getRootElement(); //獲取里面的第一個子元素 Element user = root.element("user"); String id = user.attributeValue("id"); System.out.println(id); String name = user.element("name").getText();//獲取子元素中的文本內容--法1 String age = user.elementText("age");//獲取子元素中的文本內容--法2 System.out.println(name+","+age); } //顯示(遍歷)所有用戶 @Test public void readAll() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("xml5/users.xml"); Element root = document.getRootElement(); Iterator it = root.elementIterator(); while(it.hasNext()){ Element e = it.next(); String id = e.attributeValue("id"); String name = e.elementText("name"); String age = e.element("age").getText(); System.out.println("id:"+id+",name:"+name+",age:"+age); } } //添加一個user元素 @Test public void addElement() throws Exception{ SAXReader sax= new SAXReader(); Document document = sax.read("xml5/users.xml"); Element root = document.getRootElement(); Element e = root.addElement("user"); e.addAttribute("id", "C003"); Element eName = e.addElement("name"); eName.setText("張三"); Element eAge = e.addElement("age"); eAge.setText("24"); //要把內存中的dom對象寫到磁盤中 //法一---功能有限 // FileWriter fw = new FileWriter("xml5/users.xml");//輸出到控制臺 // document.write(fw); // fw.close(); //法二---功能更強 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(new FileWriter("xml5/users.xml"), format); //以指定的輸出格式,把dom輸出到指定的目的地(文件) writer.write(document); writer.close(); } //刪除最后一個user元素 @Test public void delElement() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("xml5/users.xml"); Element root = document.getRootElement(); List list = root.elements(); Element e = list.get(list.size()-1); e.getParent().remove(e); //保存 XMLWriter writer = new XMLWriter(new FileWriter("xml5/users.xml")); writer.write(document); writer.close(); } //從零開始創建一個xml文檔 @Test public void createNewXml() throws IOException, FileNotFoundException{ Document document = DocumentHelper.createDocument(); Element root = document.addElement("hncu"); root.addElement("department").addAttribute("id", "hncu001").addElement("xky").setText("信息科學與工程學院"); //保存 XMLWriter writer = new XMLWriter(new FileOutputStream("xml5/hncu.xml")); writer.write(document); writer.close(); } //xpath的用法 @Test public void xpathDemo() throws Exception{ SAXReader sax = new SAXReader(); Document dom = sax.read("xml5/contact.xml"); //String xpath = "/*/name";//第一個/表示當前元素 //String xpath="http://contact/name";//選擇contact下面的name(兒子) //String xpath="http://aaa/preceding::*";//選擇前面的所有元素 String xpath="http://*[@id]";//選擇具有id屬性的所有元素 Element root = dom.getRootElement(); System.out.println(root.getName()); List list = root.selectNodes(xpath); for(Element e:list){ System.out.println(e.getName()+"--"+e.getText()); } } //xpath用法 @Test public void xpathDemo2() throws Exception { SAXReader sax = new SAXReader(); Document dom = sax.read("xml5/contact.xml"); Scanner sc = new Scanner(System.in); String name =sc.next(); //name=name.toLowerCase(); String pwd = sc.next(); //String xpath="http://user[@name][@pwd]";//選擇同時包含name和pwd屬性的user元素 //String xpath="http://user[@name='Jack'][@pwd='1234']";//選擇name='Jack'且pwd='1234'那個user元素 //String xpath="http://user[@name='"+name+"'][@pwd='"+pwd+"']";//按照輸入的name和ped查找那個user---name區分大小寫 String xpath="http://user[fn:lower-case(@name)='"+name+"'][@pwd='"+pwd+"']";//按照輸入的name和ped查找那個user---name不區分大小寫 System.out.println(xpath); List list = dom.selectNodes(xpath); for(Element e:list){ System.out.println(e.getName()); List eList = e.selectNodes("http://contact/name"); for(Element e2:eList){ System.out.println(e2.getText()); } } } }

      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

      Java---XML的解析(2)-DOM4J解析/Xpath

      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

      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

      Java XML

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

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

      上一篇:wps取色器怎么用? wps取色器吸取顏色的教程
      下一篇:從零開始學keras之使用預訓練的卷積神經網絡
      相關文章
      亚洲不卡AV影片在线播放| 亚洲成人影院在线观看| 久久精品国产99国产精品亚洲| 亚洲av综合avav中文| 亚洲精品成人网站在线观看| 国产精品亚洲一区二区三区久久 | 亚洲第一AV网站| 国产亚洲一区二区精品| 久久久久亚洲精品天堂久久久久久 | 久久久久亚洲精品无码网址 | 亚洲中文字幕无码久久| 亚洲中文字幕无码久久| 亚洲国产精品日韩av不卡在线| 亚洲天然素人无码专区| 亚洲人成色77777在线观看| 亚洲欧洲无卡二区视頻| 亚洲gay片在线gv网站| 亚洲AV无码专区在线观看成人| 亚洲精品GV天堂无码男同| 亚洲精品国产av成拍色拍| 在线观看亚洲专区| 亚洲精品老司机在线观看| 久久亚洲2019中文字幕| 亚洲日本一区二区三区在线| 人人狠狠综合久久亚洲88| 亚洲成AV人片一区二区| 亚洲国产a∨无码中文777| 婷婷精品国产亚洲AV麻豆不片 | 亚洲AV无码一区二区三区久久精品| 亚洲日韩AV一区二区三区中文| 亚洲av午夜电影在线观看| 亚洲毛片av日韩av无码| 亚洲精品无码午夜福利中文字幕| 亚洲国产精品VA在线观看麻豆| 亚洲日本中文字幕| 亚洲一级免费毛片| 国产精品亚洲精品久久精品| 久久精品亚洲男人的天堂| 亚洲国产精品高清久久久| 亚洲精品韩国美女在线| 中文字幕亚洲综合久久|