天天看点

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

先建一个名为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();

  }

 }

}