(一)DOM
采用DOM(Document Object Model)文档对象模型 方式首先会读取xml文档,然后在内存中形成一颗树形的结构,这个结构反应出xml文档的结构,然后就遍历树,提取出元素的内容。由于xml本身就是一种树形结构,所以DOM这种描述方法非常有效。但是由于DOM要把xml文档读取到内存中,所以如果xml文档非常大的话,那么就非常消耗内存(最大缺点)。DOM是一个对象化的xml数据接口。一个与语言无关平台无关的标准接口规范。
注意区分根节点和根元素节点,其中根节点代表整个文档,是解析xml文档的一个入口,获取xml文档的document对象,获取document对象后再去逐层解析xml,而根元素节点代表文档的根元素,在DOM规范中有四个重要的接口Document,Node,NodeList,NameNodeMap(和属性打交道,属性名称不能重复),在DOM中全部都是Node
下面是DOM解析xml文件的java代码
public static void test2()throws Exception{
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
Document document=documentBuilder.parse(new File("candidate.xml"));
//上面这几步都是固定的
NodeList nodeList=document.getElementsByTagName("PERSON");
System.out.println(nodeList.getLength());
System.out.println("================================");
for(int i=0;i<nodeList.getLength();i++){
Element element=(Element)nodeList.item(i);
String contentName=element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();
System.out.println(contentName);
String contentADDRESS=element.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue();
System.out.println(contentADDRESS);
String contentTEL=element.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue();
System.out.println(contentTEL);
String contentFAX=element.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue();
System.out.println(contentFAX);
String contentEMAIL=element.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue();
System.out.println(contentEMAIL);
System.out.println("================================");
}
}