文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。
使用DOM方式解析xml文档的基本步骤:
1、创建DocumentBuilderFactory工厂对象。
2、创建DocumentBuilder类对象。
3、构建Document对象。
4、通过Document对象.getElementsByTagame()方法获取节点,返回值是一个NodeList对象。
5、遍历第四步获取的节点,获取该节点的子节点(getChildNodes)。如果节点有属性,可以通过节点.getAttributes()方法获取,返回值是一个NamedNodeMap对象,取得属性值可以通过NamedNodeMap对象.getNamedItem("属性名").getNodeValue()的方式获取。
6、如果节点的层级比较多,那么依次往下遍历即可。
6、获取节点值,当遍历到达根部时,可以通过节点.getTextContent()方法取得节点的值。
以下是一个简单的解析xml文档的小例子:
例如有以下一个xml文件,文件名为Student.xml,里面保存了一些学生信息,接下来通过java解析这个文档。
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Student name="zhangsan">
<age>22</age>
<height>176</height>
</Student>
<Student name="lisi">
<age>20</age>
<height>186</height>
</Student>
<Student name="wangwu">
<age>24</age>
<height>196</height>
</Student>
</Students>
构建一个java类
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Dom {
public static void main(String[] args)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//构建工厂类对象
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("Student.xml");
NodeList list = doc.getElementsByTagName("Student");//取得根节点
for(int i=0;i<list.getLength();i++)
{
String age = new String();
String height = new String();
Node node = list.item(i);
NamedNodeMap map = node.getAttributes();//获取节点属性
String name = map.getNamedItem("name").getNodeValue();//获取节点属性值
NodeList students = node.getChildNodes();//获取子节点
for(int j=0;j<students.getLength();j++)
{
Node s = students.item(j);
if(s.getNodeName().equals("age"))
{
age = s.getTextContent();
}else if(s.getNodeName().equals("height"))
{
height = s.getTextContent();
}
}
System.out.println("姓名:" + name + " 年龄:" +age + " 身高:" + height);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
程序运行的结果是在控制台打印所有学生的基本信息。