一.接口
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]);
}
}