dom4j基本操做

DOM4J與利用DOM、SAX、JAXP機制來解析xml相比,DOM4J 表現更優秀,具備性能優異、功能強大和極端易用使用的特色,只要懂得DOM基本概念,就能夠經過dom4j的api文檔來解析xml。dom4j是一套開源的api。實際項目中,每每選擇dom4j來做爲解析xml的利器。html

針對於XML標準定義,對應於圖2-1列出的內容,dom4j提供瞭如下實現:java

經常使用APInode

 org.dom4j.io.SAXReaderjson

  • read  提供多種讀取xml文件的方式,返回一個Domcument對象

 org.dom4j.Documentapi

  • iterator  使用此法獲取node
  • getRootElement  獲取根節點

 org.dom4j.Nodedom

  • getName  獲取node名字,例如獲取根節點名稱爲bookstore
  • getNodeType  獲取node類型常量值,例如獲取到bookstore類型爲1——Element
  • getNodeTypeName  獲取node類型名稱,例如獲取到的bookstore類型名稱爲Element

 org.dom4j.Element性能

  • attributes  返回該元素的屬性列表
  • attributeValue  根據傳入的屬性名獲取屬性值
  • elementIterator  返回包含子元素的迭代器
  • elements  返回包含子元素的列表

 org.dom4j.Attribute編碼

  • getName  獲取屬性名
  • getValue  獲取屬性值

 org.dom4j.Texturl

  • getText  獲取Text節點值

 org.dom4j.CDATAspa

  • getText  獲取CDATA Section值

 org.dom4j.Comment

  • getText  獲取註釋

下面作了一個類以以下的XML爲例:

<html>
    <head>
        <title>解析xml例子</title>
        <script>
            <username>yangrong</username>
            <password>123456</password>
        </script>
    </head>
    <body>
        <result>0</result>
        <form>
            <banlce>1000</banlce>
            <subID>36242519880716</subID>
        </form>
    </body>
</html>

 

import java.util.HashMap;
import java.util.Iterator; import java.util.Map; import java.util.List; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.URL; 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 com.alibaba.fastjson.JSON; public class OperateXml { @SuppressWarnings("unused") public static void main(String[] args) { // 下面是須要解析的xml字符串例子 String xmlString = "<html><head><title>解析xml例子</title><script><username>yangrong</username><password>123456</password></script></head><body><result>0</result><form><banlce>1000</banlce><subID>36242519880716</subID></form></body></html>"; //主動建立document對象. Document document=DocumentHelper.createDocument();//創建document對象,用來操做xml文件  Document testdoc=DocumentHelperreadStringXml(xmlString); //將文檔或節點的XML轉化爲字符串. String docXmlText=testdoc.asXML(); String teststring=Documentanalysis1(testdoc); System.out.print(teststring); } public static Document DocumentHelperreadStringXml(String xmlContent) { // DocumentHelper 解析xml字符串 Document document = null; try { document = DocumentHelper.parseText(xmlContent); } catch (DocumentException e1) { // TODO Auto-generated catch block  e1.printStackTrace(); } return document; } public static Document SAXReaderreadStringXml(String xmlContent) throws DocumentException, UnsupportedEncodingException { /* SAXReader解析xml字符串 */ Document document = null; try { // 讀取輸入流 SAXReader saxReader = new SAXReader(); document = saxReader.read(new ByteArrayInputStream(xmlContent.getBytes("utf-8")));// 字符串要根據相應的編碼轉成輸入流才能被SAXReader讀取。 } catch (Exception ex) { ex.printStackTrace(); } return document; } // 讀寫XML文檔主要依賴於org.dom4j.io包,有DOMReader和SAXReader兩種方式。由於利用了相同的接口,它們的調用方式是同樣的。 public static Document SAXReaderreadfile(String filename) { /* SAXReader解析xml文件 */ Document document = null; try { SAXReader saxReader = new SAXReader(); document = saxReader.read(new File(filename)); // 讀取XML文件,得到document對象 } catch (Exception ex) { ex.printStackTrace(); } return document; } public static Document SAXReaderreadurl(URL url) { Document document = null; try { SAXReader saxReader = new SAXReader(); document = saxReader.read(url); // 讀取XML文件,得到document對象 } catch (Exception ex) { ex.printStackTrace(); } return document; } // 根節點是xml分析的開始,任何xml分析工做都須要從根開始 @SuppressWarnings("unchecked") public static String Documentanalysis1(Document doc) { Map<String, String> uploadMap = new HashMap<String, String>(); Element html = doc.getRootElement();// 獲取根結點 Element head = html.element("head");// 獲取子結點 Element title = head.element("title");// 獲取子子結點 Element script = head.element("script");// 獲取子子結點 String text=script.elementText("username");//這個是取得script節點下的username字節點的文字. // 獲得根元素的全部子節點 List<Element> elist = script.elements(); // 遍歷全部子節點 for (int i = 0; i < elist.size(); i++) { Element e = elist.get(i); uploadMap.put(e.getName(), e.getText()); } return JSON.toJSONString(uploadMap); } @SuppressWarnings("rawtypes") public static String Documentanalysis2(Document doc) { // 將解析結果存儲在HashMap中 Map<String, String> uploadMap = new HashMap<String, String>(); // 獲得xml根元素 Element root = doc.getRootElement(); Iterator forms = root.element("body").element("form").elementIterator(); // 獲取ticketNotify節點下全部的ticket節點的配置屬性,並將其放到Map中 /* // 建立迭代器,用來查找要刪除的節點,迭代器至關於指針,指向root下全部的title節點 Iterator iterator =root.elementIterator("title");*/ while (forms.hasNext()) { Element e = (Element) forms.next(); uploadMap.put(e.getName(), e.getText()); } return JSON.toJSONString(uploadMap); } @SuppressWarnings("unchecked") public static String Documentanalysis3(Document doc) { // 將解析結果存儲在HashMap中 Map<String, String> uploadMap = new HashMap<String, String>(); // 用Document的selectNodes來讀取節點,返回list List<Element> elementList = doc.selectNodes("/html/body/form/*");

      /* 選取未知節點
      XPath 通配符可用來選取未知的 XML 元素。

      通配符     描述
      *        匹配任何元素節點。
      @*        匹配任何屬性節點。
      node()   匹配任何類型的節點。*/

 for (Element e : elementList) { uploadMap.put(e.getName(), e.getText()); } return JSON.toJSONString(uploadMap); } // 添加xml節點,addroot爲即將插入節點的父節點 public static void addElement(Element addroot, String elementname, String elementvalue) { Element childelement = addroot.addElement(elementname); childelement.setText(elementvalue); } // 刪除xml節點,addroot爲即將刪除節點的父節點 public static void addElement(Element addroot, String elementname) { addroot.remove(addroot.element(elementname)); } //寫入XML文件,可設置編碼方式設置encodetype爲"",默認爲UTF-8 public static boolean doc2XmlFile(Document document, String filename,String encodetype) { boolean flag = true; try { //經過XMLWriter將Document對象表示的XML樹寫入指定的文件 XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(filename), "".equals(encodetype)?"UTF-8":encodetype)); writer.write(document); writer.close(); } catch (Exception ex) { flag = false; ex.printStackTrace(); } System.out.println(flag); return flag; } //建立xml文件 public static void WriterXmltoFile(Document document, String filename,String encodetype) { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(encodetype); // 指定XML編碼 try{ XMLWriter writer=new XMLWriter(new FileWriter(new File(filename)),format); writer.write(document); writer.close(); }catch(Exception e){ e.printStackTrace(); } } }

Element類

getQName()

元素的QName對象

getNamespace()

元素所屬的Namespace對象

getNamespacePrefix()

元素所屬的Namespace對象的prefix

getNamespaceURI()

元素所屬的Namespace對象的URI

getName()

元素的local name

getQualifiedName()

元素的qualified name

getText()

元素所含有的text內容,若是內容爲空則返回一個空字符串而不是null

getTextTrim()

元素所含有的text內容,其中連續的空格被轉化爲單個空格,該方法不會返回null

attributeIterator()

元素屬性的iterator,其中每一個元素都是Attribute對象

attributeValue()

元素的某個指定屬性所含的值

elementIterator()

元素的子元素的iterator,其中每一個元素都是Element對象

element()

元素的某個指定(qualified name或者local name)的子元素

elementText()

元素的某個指定(qualified name或者local name)的子元素中的text信息

getParent

元素的父元素

getPath()

元素的XPath表達式,其中父元素的qualified name和子元素的qualified name之間使用"/"分隔

isTextOnly()

是否該元素只含有text或是空元素

isRootElement()

是否該元素是XML樹的根節點

相關文章
相關標籤/搜索