XML(一) DOM解析XML文档实例一

先建一个名为student.xml的XML文件:

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<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();
  }
 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章