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