使用DOM解析XML文档

当使用DOM解析XML文档时,使用的是DOM的思想,因而不可避免需要将XML文档转换成DOM树。DOM解析器在装入XML文档时,已经在内存中将XML文档的每个元素转换成DOM树的每个节点了。

对于下面的一个简单XML文档:

<?xml version="1.0" encoding="gb2312"?>
<StudentInfo>
    <student>
         <name>赵海波</name>
         <sex>男</sex>
         <lesson>
              <lessonName>Spring整合开发</lessonName>
              <lessonScore>85</lessonScore>
         </lesson>
         <lesson>
              <lessonName>轻量级J2EE应用开发</lessonName>
              <lessonScore>95</lessonScore>
         </lesson>
         <lesson>
              <lessonName>Ajax应用开发</lessonName>
              <lessonScore>80</lessonScore>
         </lesson>
     </student>
     <student>
        <name>程卫娜</name>
        <sex>女</sex>
        <lesson>
              <lessonName>Spring整合开发</lessonName>
              <lessonScore>80</lessonScore>
       </lesson>
       <lesson>
              <lessonName>轻量级J2EE应用开发</lessonName>
              <lessonScore>85</lessonScore>
       </lesson>
       <lesson>
              <lessonName>Ajax应用开发</lessonName>
              <lessonScore>90</lessonScore>
      </lesson>
      </student>
</StudentInfo>

 使用DOM解析该文档的代码如下:

import java.io.IOException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.apache.xerces.parsers.DOMParser;
//import com.sun.org.apache.xerces.internal.parsers.DOMParser;

public class TestDOMParser {
	public static void main(String[] args)
	{    	    	    
        TestDOMParser tp = new TestDOMParser();        
        tp.parseXMLFile("student.xml");
    }
    public void parseXMLFile(String fileName)
    {
    	try {
			//构造DOM解析器的实例;
			DOMParser parser=new DOMParser();
			//开始解析文档,将XML文档转换成DOM树存入内存;
			parser.parse(fileName);
			//getDocument()获取Document对象;
			Document doc=parser.getDocument();
			//获取root节点;
			Element elmtInfo=doc.getDocumentElement();
			//getElementsByTagName()根据标记获取节点列表:利用父子关系获取子节点;
			NodeList nlStudent=elmtInfo.getElementsByTagName("student");
			System.out.println("XML文件开始解析");
			//循环输出每一个学生的成绩;
			for(int i=0;i<nlStudent.getLength();i++)
			{
				//当前的student元素;
				Element elmtStudent=(Element)nlStudent.item(i);
				//利用父子关系获取子节点;
				NodeList nlCurrent=elmtStudent.getElementsByTagName("name");
				//读取到"姓名"节点的值;
				System.out.println("姓名:"+nlCurrent.item(0).getFirstChild().getNodeValue());
                //利用父子关系获取子节点;
				nlCurrent=elmtStudent.getElementsByTagName("sex");
				//读取到"性别"节点的值;
				System.out.println("性别:"+nlCurrent.item(0).getFirstChild().getNodeValue());
				//再次获取多个课程节点;
				nlCurrent=elmtStudent.getElementsByTagName("lesson");
				//遍历每个课程的节点;
				for(int j=0;j<nlCurrent.getLength();j++)
				{
					//获取第j个课程节点;
					Element elmtLesson=(Element)nlCurrent.item(j);
					//获取lessonName节点的值;
					NodeList nlLesson=elmtLesson.getElementsByTagName("lessonName");
					System.out.print(nlLesson.item(0).getFirstChild().getNodeValue());
					System.out.print(":");
					//获取lessonScore节点的值;
					nlLesson=elmtLesson.getElementsByTagName("lessonScore");
					System.out.println(nlLesson.item(0).getFirstChild().getNodeValue());
				}
				System.out.println("--------------------------------");
			}
			System.out.println("XML文档解析结束");
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}   	
    }
}

 通过上面的代码可以看出,DOM解析器处理XML文档的方式类似于树的遍历。当我们在代码中以遍历树的方式遍历每个节点时,DOM解析器负责对应处理文档中的每个元素。

你可能感兴趣的:(apache,spring,Ajax,xml,J#)