XML基礎之DOM4j解析(二)

上一篇講了XML基本規則,現在講講XML的解析
1. DOM4J概述
1.1  什麼是DOM4J
Dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極易使用的特點。現在很多軟件採用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j開發,需下載dom4j相應的jar文件。

Dom4j的官方網站:http://sourceforge.net/projects/dom4j/

1.2 搭建Dom4j的開發環境
添加Dom4j的jar包即可:dom4j-1.6.1.jar

使用時注意要導入org.dom4j.*中的類。


2. 使用DOM4J讀取XML文件
2.1  讀取XML文檔的方式
 

/**
  * 獲取document
  * @return document
  */
 public static Document GetDocument(){
  Document document = null;
  //方法一:
  //1.讀取XML文件,獲得document對象
  SAXReader saxReader = new SAXReader();
  try {
   document = saxReader.read(new File("D:\\person.xml"));
  } catch (DocumentException e) {
   e.printStackTrace();
  }
  /*//方法二:解析XML形式的文本,得到document對象
  String xmlText="<person></person>";
  try {
   document = DocumentHelper.parseText(xmlText);
  } catch (DocumentException e) {
   e.printStackTrace();
  }*/
  return document;
 }



2.2 遍歷所有元素

public static void testRead() throws Exception {
  // 讀入XML文件,並獲取document
  Document document = GetDocument();
  // 獲取根節點
  Element element = document.getRootElement();
  // 從根節點開始,遍歷所有的節點(Element是Node的子接口)
  traverse(element);
 }

 // 遍歷所有元素的遞歸方法
 public static void traverse(Element element) {
  //獲取所以元素的迭代器
  Iterator<Element> iter = element.elementIterator();
  while(iter.hasNext()){
   Element e = iter.next();
   System.out.println(e);
   traverse(e);
  }
 }



 2.3  查找元素

            /**
  * 查找元素
  * @param elementName 要查找的元素名稱
  * @return 返回查找到的元素,null表示沒查找到
  */
 public static Element findElement(String elementName) {
  // 讀入XML文件,並獲取document
  Document document = GetDocument();
  // 獲取根節點
  Element rootElement = document.getRootElement();
  //用來存儲查找到的元素
  Element myElement = null;
  Iterator<Element> iter = rootElement.elementIterator();
  
  while(iter.hasNext()){
   Element ele = iter.next();
   //查找到就賦值給myElement
   if(ele.getName().equals(elementName)){
    myElement = ele;
   }
  }
  return myElement;
  
 }



說明:就可以按照這種方式查找指定特徵的元素或是屬性。


2.4 獲取一個元素的信息
2.4.1 基本信息

 /**
  * 獲取元素的基本信息
  * @param element表示要獲取信息的元素
  */
 public static void getElementInfo(Element element){
  // 獲取元素的名稱(如果是標籤,則是標籤名;如果是屬性,則是屬性名)
  String name = element.getName();

  // 獲取元素包含的文本內容(只是指這個標籤體中的文本,如果只有子標籤,則此值爲空字符串)
  String text = element.getText();

  // 獲取元素包含的所有文本(標籤體中的文本,也包含子孫標籤的文本內容)
  String stringValue = element.getStringValue();

  // 獲取這個元素的XML源碼
  String xml = element.asXML();

 }


 

2.4.2 與子元素有關的

 

/**
  * 關於獲取子元素
  * @param parentElement 父元素
  */
 public static void childElement(Element parentElement){
  // 獲取此元素的所包含的所有節點的數量
  int nodeCount = parentElement.nodeCount();

  // 獲取此元素所包含的所有子節點的迭代器,包含標籤、註釋、文本等元素
  Iterator<Node> nodeIter = parentElement.nodeIterator();
  while(nodeIter.hasNext()){
   Node node = nodeIter.next();
   System.out.println(node.getName());
  }
  // 獲取此元素的所有子標籤的迭代器,只有標籤元素,不包含註釋與文本元素(迭代器、List集合)
  //1.迭代器
  Iterator<Element> elementIter = parentElement.elementIterator();
  
  //2.list集合 二選一
  List<Element> elementList = parentElement.elements();

 }


2.4.3 與屬性有關的


 

 /**
  * 獲取元素屬性
  * @param element 元素
  */
 public static void getAttribute(Element element){
  //方法一:
  // 獲取此元素的屬性的數量
  int attrCount = element.attributeCount();
  for(int i=0;i<attrCount;i++){
   element.attribute(i);
  }
  // 獲取此元素的所有屬性(迭代器、List集合)
  //方法二:
  Iterator<Attribute> attrIter = element.attributeIterator();
  //方法三:
  List<Attribute> attrList = element.attributes();

 }


 

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