优快云+随笔+No.18+&&XML解析

本文介绍了如何使用DOM方式解析XML文档,包括DOM API的基本概念和解析流程,并通过示例代码展示了解析XML文档的过程。

 

 

DocumentObject  Model 文档对象模型,由W3C制定 标准规范 与具体语言无关 随机访问XML文档 重复读 

DOM的编程API:

   Node:节点

   Document :根节点 表示整个文档

   NodeList:节点的集合

   NamedNodeMap:一般用于存储属性

   Element:

编程思路:

   1.获得DocumentBuilderFactory的实例

   2.通过工厂获得DocumentBuilder的解析器

   3.parse(File)======>Document

------------MyDom.xml-----------

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import java.io.*;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.w3c.dom.Node;

import org.w3c.dom.Element;

import org.w3c.dom.Attr;

import org.w3c.dom.NamedNodeMap;

//通过DOM方式解析XML文档

public class MyDom{

   publicstatic void main(String args[])throws Exception{

        //1.得到工厂类(DocumentBuilderFactory)的实例

     DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

        //2.得到解析器实例

     DocumentBuilderbuilder=factory.newDocumentBuilder();

        //3.使用parse()解析文件 返回 文档的根节点Document

     Document  doc=builder.parse(newFile("student.xml"));

     Element  root=doc.getDocumentElement();

     System.out.println("根元素是:"+root.getTagName());

     NodeList nl=doc.getElementsByTagName("student");

     //NodeListnl=root.getChildNodes();

     //遍历NodeList

     for(inti=0;i<nl.getLength();i++){

        Nodenode=nl.item(i);    //得到Node集合中的每一个

        NamedNodeMapnnm=node.getAttributes();

        for(intj=0;j<nnm.getLength();j++){

           Node att_node=nnm.item(j);

          Attr  attr=(Attr)att_node;

          Stringatt_name=attr.getName();

          Stringatt_value=attr.getValue();

          System.out.println(att_name+"="+att_value);

        }

        Elementfirst=(Element)node;

        System.out.println(first.getTagName());

        //得到每个student元素的子节点

        NodeListsecs=node.getChildNodes();

        System.out.println(secs.getLength());

        for(intk=0;k<secs.getLength();k++){

          //得到二级子节点

          Nodesec_node=secs.item(k);

          //过滤空白

          if(sec_node.getNodeType()==Node.ELEMENT_NODE){

             Elementsec=(Element)sec_node;

             System.out.println(sec.getTagName());

             System.out.println(sec.getTextContent());

          }

        }

     }

   }

}

----------MyDom2.xml--------------

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import java.io.*;

import org.w3c.dom.*;

public class MyDom2{

   publicstatic void main(String args[])throws Exception{

     DocumentBuilderbuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();

     Documentdoc=builder.parse(new File("student.xml"));

     NodeListfirsts=doc.getElementsByTagName("student");

     //遍历一级子元素过程

     for(inti=0;i<firsts.getLength();i++){

     Elementfirst=(Element)firsts.item(i);//student

     Stringid_value=first.getAttribute("id");

     Stringname=first.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();

     Stringage=first.getElementsByTagName("age").item(0).getFirstChild().getNodeValue();

     Stringaddress=first.getElementsByTagName("address").item(0).getFirstChild().getNodeValue();

     System.out.println("idis:"+id_value+"\t"+name+"\t"+age+"\t"+address);

     //  getChildNodes()

        //NodeList first.getChildNodes();

     }

   }

}

 

2011/9/28

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值