XML問件解析(面向對象)

一.接口

package objectXML;

import org.w3c.dom.Document;

public interface InterXML {
 //用來各種方法的調用
 public void DOMParserXML(String fileName);
 //打印Document中的所有元素
 public void printElement(Document doc);
 //打印Document中的所有屬性
 public void printAttributes(Document doc);
}
二.實現接口中的方法

package objectXML;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.sun.org.apache.xerces.internal.parsers.DOMParser;

public class PrintXML implements InterXML {

 public void DOMParserXML(String fileName) {
  // TODO Auto-generated method stub
  try {
   //使用緩衝字符流輸入讀取要解析的文件
   BufferedReader in = new BufferedReader(new FileReader(fileName));
   //創建一個解析器
   DOMParser parser = new DOMParser();
   //解析XML文件
   parser.parse(new InputSource(in));
   //獲得解析後的文件信息
   Document doc = parser.getDocument();
   //打印Document中的所有元素
   System.out.println("元素是:");
   printElement(doc);
   //打印Document中的所有屬性
   System.out.println();
   System.out.println("屬性是:");
   printAttributes(doc);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public void printAttributes(Document doc) {
  // TODO 打印Document中的所有屬性
  //獲得所有節點名稱的集合
  NodeList list = doc.getElementsByTagName("*");
  //循環打印
  for(int i=0;i<list.getLength();i++){
   //根據指定的索引得到元素節點
   Element e = (Element)list.item(i);
   //輸出元素的名稱及值
   System.out.println(e.getTagName()+":"+e.getFirstChild().getNodeValue());
   //獲得節點中的所有屬性
   NamedNodeMap map = e.getAttributes();
   //判斷是否有屬性
   if(map != null){
    for(int j=0;j<map.getLength();j++){
     //獲得指定索引的屬性
     Attr attr = (Attr)map.item(j);
     System.out.println(attr.getName()+":"+attr.getValue());
    }
   }
  }
 }

 public void printElement(Document doc) {
  // TODO 打印所有元素名稱
  NodeList list = doc.getElementsByTagName("*");
  for(int i=0;i<list.getLength();i++){
   Node e = list.item(i);
   System.out.println(e.getNodeName()+" ");
  }

 }

}
三.類的調用

package objectXML;

public class TestXML {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 類的調用
  if(args.length != 1){
   System.err.println("Usage: java DOMSample filename");
   System.exit(1);
  }
  InterXML print = new PrintXML();
  //從外面傳進來參數(要解析的XML文件路徑)
  print.DOMParserXML(args[0]);
 }

}

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