使用DOM解析XML文档

使用DOM解析XML文档

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

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

   xml代码:

<? xml version="1.0" encoding="GB2312" standalone="no" ?>
< 书籍列表 >
    
< 书籍 分类="计算机" 书名="XML 的今生今世" 书号 ="SN-123" >
        
< 价格 > 66.66 </ 价格 >
        
< 简要介绍 >
            该书详细描写XML的从出生到衰老的整个过程
        
</ 简要介绍 >
        
< 出版社 > spoto出版社 </ 出版社 >
        
< 主要内容 >
            
< 章节 title ="前言"  number ="0" />
            
< 章节 title ="XML的历史"  number ="1" >
                
< 主题 name ="SGML,XML的前生" />
                
< 主题 name ="HTML与SGML" />
                
< 主题 name ="XML的应用领域" />
            
</ 章节 >
            
< 章节 title ="XML文档规则"  number ="2" >
                
< 主题 name ="元素" />
                
< 主题 name ="属性" />
                
< 主题 name ="注释" />
            
</ 章节 >
        
</ 主要内容 >
    
</ 书籍 >
</ 书籍列表 >

   使用DOM解析该文档的代码如下:
   java 代码:
package  contentsParser;

import  java.io.IOException;

import  org.apache.xerces.parsers.DOMParser;
import  org.w3c.dom.Attr;
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  TestContensDOMParser  {

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        TestContensDOMParser tcdp 
= new TestContensDOMParser();
        tcdp.parseXMLFile(
"contents.xml");
    }

    
    
    
/**//*
     * 解析文档
     
*/

    
public void parseXMLFile(String fileName) {
        
try {
            DOMParser parser 
= new DOMParser();
            parser.parse(fileName);    
//    解析文件
            
            
//    获得文档对象
            Document doc = parser.getDocument();
            
            
//    获得根节点
            Element root = doc.getDocumentElement();
            
            
//     得到所有书籍节点
            NodeList bookList = root.getElementsByTagName("书籍");
            
            System.out.println(
"XML文件开始解析..");
            
            
for(int i=0;i<bookList.getLength();i++{
                
//    获得当前书籍元素
                Element book = (Element) bookList.item(i);
                System.out.println(
"书籍:分类:" + book.getAttribute("分类"+ " ; "
                        
+ "书名:" + book.getAttribute("书名"+ " ; " + "书号:" + book.getAttribute("书号") );
                
                NodeList priceList 
=  book.getElementsByTagName("价格");
                System.out.println(
"价格:"
                            
+ priceList.item(0).getFirstChild().getNodeValue());
                
                NodeList introList 
=  book.getElementsByTagName("简要介绍");
                System.out.println(
"简要介绍:"
                            
+ introList.item(0).getFirstChild().getNodeValue());
                
                NodeList publishList 
=  book.getElementsByTagName("出版社");
                System.out.println(
"出版社:"
                            
+ publishList.item(0).getFirstChild().getNodeValue());
                
                NodeList contentList 
=  book.getElementsByTagName("主要内容");
                System.out.println(
"主要内容:");
                
                
for(int j=0;i<contentList.getLength();i++{
                    
// 获得主要内容的元素
                    Element content = (Element) contentList.item(0);
                
                    NodeList zhangjieList 
= content.getElementsByTagName("章节");
                    
                    
for(int k=0;k<zhangjieList.getLength();k++{
                        
// 章节属性
                        Element zhangjie = (Element) zhangjieList.item(k);
                        System.out.print(
"章节:  ");
                        System.out.print(
"title:" + zhangjie.getAttribute("title"));
                        System.out.print(
";");
                        System.out.print(
"number: "+zhangjie.getAttribute("number"));
                        System.out.println();
                        
                        
//    章节内容                    
                        NodeList subjectList = zhangjie.getElementsByTagName("主题");
                        
for(int n=0;n<subjectList.getLength();n++{
                            Element subject 
= (Element) subjectList.item(n);
                            System.out.println(
"主题:" + subject.getAttribute("name"));
                        }

                        
                    }

                }

            }

            System.out.println();
            System.out.println(
"XML文件解析结束");
            
        }
 catch (SAXException e) {
            e.printStackTrace();
        }
 catch (IOException e) {
            e.printStackTrace();
        }

    }

    

}

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

你可能感兴趣的:(使用DOM解析XML文档)