DOM解析是把整个需要解析的xml文件暂存在内存中。
需要解析的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>lee</name>
<age>30</age>
</person>
<person id="20">
<name>leo</name>
<age>24</age>
</person>
<persons>
<person id="23">
<name>lee</name>
<age>30</age>
</person>
<person id="20">
<name>leo</name>
<age>24</age>
</person>
</persons>
使用DOM方式解析的java代码:
package xml;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOMForXml {
public static void main(String[] args) {
//使用DocumentBuilderFactory工厂创建DocumentBuilder对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//生成DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
//调用完这句后XML文档解析完成,暂存在内存中
Document document = builder.parse("test.xml");
//获得根元素
Element root = document.getDocumentElement();
//匹配结点,返回结点集
NodeList personNodes = root.getElementsByTagName("person");
for(int i=0;i<personNodes.getLength();i++){
//遍历结点集
Element personElement = (Element)personNodes.item(i);
//获得结点上的属性
String id = personElement.getAttribute("id");
//输出
System.out.println("id:"+id);
//获得该节点下面的子节点
NodeList personChilds = personElement.getChildNodes();
//遍历子结点
for(int j=0;j<personChilds.getLength();j++){
//判断当前结点是否是元素类型结点
if(personChilds.item(j).getNodeType()==Node.ELEMENT_NODE){
Element childElement = (Element)personChilds.item(j);
//判断当前结点
if(childElement.getNodeName().equals("name")){
//获得当前结点对应的值
System.out.println("name:"+childElement.getFirstChild().getNodeValue());
}else if(childElement.getNodeName().equals("age")){
System.out.println("age:"+childElement.getFirstChild().getNodeValue());
}
}
}
}
} catch (ParserConfigurationException 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();
}
}
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOMForXml {
public static void main(String[] args) {
//使用DocumentBuilderFactory工厂创建DocumentBuilder对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//生成DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
//调用完这句后XML文档解析完成,暂存在内存中
Document document = builder.parse("test.xml");
//获得根元素
Element root = document.getDocumentElement();
//匹配结点,返回结点集
NodeList personNodes = root.getElementsByTagName("person");
for(int i=0;i<personNodes.getLength();i++){
//遍历结点集
Element personElement = (Element)personNodes.item(i);
//获得结点上的属性
String id = personElement.getAttribute("id");
//输出
System.out.println("id:"+id);
//获得该节点下面的子节点
NodeList personChilds = personElement.getChildNodes();
//遍历子结点
for(int j=0;j<personChilds.getLength();j++){
//判断当前结点是否是元素类型结点
if(personChilds.item(j).getNodeType()==Node.ELEMENT_NODE){
Element childElement = (Element)personChilds.item(j);
//判断当前结点
if(childElement.getNodeName().equals("name")){
//获得当前结点对应的值
System.out.println("name:"+childElement.getFirstChild().getNodeValue());
}else if(childElement.getNodeName().equals("age")){
System.out.println("age:"+childElement.getFirstChild().getNodeValue());
}
}
}
}
} catch (ParserConfigurationException 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();
}
}
}