先建一个名为student.xml的XML文件:
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="student.xsl" target="_blank" rel="external nofollow" ?>
<students>
<student sn="01">
<name>张三</name>
<age>20</age>
</student>
<student sn="02">
<name>李四</name>
<age>22</age>
</student>
</students>
解析类 StudentInfo.java:
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 StudentInfo
{
public static void main(String[] args)
{
//创建DOM解析器
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
System.out.println("解析器实现类:" + dbf.getClass().getName());
try
{
//得到具体厂商的解析器实例
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("student.xml");
//通过元素标签名来获得某一类元素的集合
NodeList nodes = doc.getElementsByTagName("student");
//得到该元素集合的大小
int len = nodes.getLength();
//遍历所有元素
for(int i=0;i<len;i++)
{
//获得第i个元素
Element eletStudent = (Element)nodes.item(i);
//通过标签名name获得节点集合,而该集合中只有一个元素.
//Element接口为Node的子接口,在这里使用父接口Node
//是为了使用getFirsetChild()方法,这个方法在Element
//接口中未定义
Node eletName = eletStudent.getElementsByTagName("name").item(0);
Node eletAge = eletStudent.getElementsByTagName("age").item(0);
//获得某一个节点之后并不能直接使用getNodeValue()方法来获取值,
//应先获取文本节点,然后再获取具体的值,eletName的第一个子节点即
//文本节点
String name = eletName.getFirstChild().getNodeValue();
String age = eletAge.getFirstChild().getNodeValue();
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("--------------");
}
} catch (ParserConfigurationException e)
{
e.printStackTrace();
} catch (SAXException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}