`

j2ee10:xml01:dom解析和sax解析

    博客分类:
  • j2ee
 
阅读更多

第一:基本概念

1.xml是可扩展的标记语言(他可以让程序员自己定义标签),提供了一套跨平台、跨网络、跨程序的语言的数据描述方式,
使用xml可以方便的实现数据交换、系统配置、内容管理等常见功能
2.html和xml的不同点:html中的元素是固定的,并且以显示为主。xml语言中的标签都是由用户定义的,主要以数据保存为主。
-------------------------------
3.什么是xml:
答:第一:xml可以清晰的描述出数据的保存结构。第二:在xml中的组成部分:头信息、数据区
xml可以使用dom读取或者输出xml文件
4.什么是xml解析:
答:所有的xml文件都是由节点保存内容的,所谓的解析操作就是指从指定的节点之中将内容读取出来。xml是描述(保存)内容,xml解析是读取内容
5.在xml解析中w3c定义了sax和dom两种解析方式:xml文件-->xml解析器-->dom接口或者sax接口-->xml应用程序
这两种w3c标准解析中,以dom为主。
6.dom解析是文档对象模型(也就是个树形结构),也就是xml本身是以树状结构出现的。
----------------------------------------------------------------------------------------------------
上课:
1.Html:是实现网页ui的标记语言
  Xml:跟Html类似,也是由标签构成内容的文件<x></x>,并且符合dom树(dom规范)。不同的地方是在xml中所有的标签由程序员自己定义。
2.作用:
   ----用一种定义好的标准结构描述(保存)数据。完成不同平台不同系统之间的数据的交互。
   ----用来配置项目(对项目中的数据进行描述)
3.isbn是属性,虽然放在属性的位置了,但也相当于一个列
4.dom解析:解析就是完成数据的交互。
    --1.获得解析器工厂,2,通过工厂获得解析对象,3.通过解析器对象解析xml文件后获得文档的跟节点也就是document,4.根据文档跟节点document获得元素的跟节点
    ----DocumentBuilderFactory类是个抽象的类而且构造方法是受保护的,不能被实例化,因此需要需要使用静态方法获取对象。由于是抽象的,因此引用的是子类对象
    ----DocumentBuilder类也是抽象的
    ----解析parse完成之后,就能够获得整个document对象。Document是个接口,表示整个html或者xml。(因为这两个都符合dom树)
    ----getDocumentElement是获得元素(这样通过document文档找到了元素的跟节点)。这个方法由document调用
    ----getTextContent方式是获得两个节点之间的内容。(注意是两个标签之间的)
----注意:1.Document继承node。
 ---2.元素跟节点的区别:Element继承Node接口,因此经常使用node接口的属性来获取元素element中的所有属性的集合。元素指的是每个标签。节点的范围比元素的范围大,除了标签之外,标签之间围堵的内容也是节点(文本节点),空白(换行)也是,所以是继承关系
 ---3.当找到类型为1的节点的时候,表示是元素节点,元素节点的NodeValue方法的值是null,因此使用元素节点的getTextContent方法获取该元素节点所围堵的文本节点的内容。

特点:在解析的时候需要一次加载整个xml文档形成dom树,此时有了dom树就获得了document对象。
  当文档数据量大的时候,导致速度慢、需要较大的内存资源、不能改变内容(只是改变内存中的内容了,不能改变物理文件)。

5.sax解析:解决上面的问题
特点:sax的意思是simple api for Xml:操作xml 的简单接口。sax与dom不同的是,sax采用一种顺序的方式进行访问,是一种快速夺取xml的方式。当加载文档的时候遇到文档的开始结束,标签的开始结束的时候就会就会调用
相关的处理方法。
  回调方法:当对象被调用的时候,该对象里面的方法会自动被执行,不用我们调用,也不用我们传参。
  ----sax解析是基于事件驱动模型的解析(也就是说程序是由用户的操作引起程序的下一步执行。sax认为碰到(加载)一个文档就触发了一个事件,也就是startDocument方法等,每一个节点都会触发一个事件。
    解析完成之后,该节点将在内存中删除)
   -----不能对内容做修改,只能读取(因为加载之后会被删掉)

1.加静态代码块
2.从xml中解析出来之后封装到对象里
3.通过反射获得对象,然后获得所有属性,在然后把属性名变成setXxxxx
------------------------
李兴华视频2:
1.Element是Node接口的实例
2.nodelist.item(0).getFirstChild().getNodeValue()是获得节点集合中的第一个元素的第一个孩子的值。

 

第二:代码实现

1.dom解析

package com.dom;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest {

 public static void main(String[] args) { 
  try {
   DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//创建解析器工厂对象
   DocumentBuilder db = dbf.newDocumentBuilder();//创建解析器对象
   Document doc = db.parse("book.xml");//解析xml文件,获得xml文件的跟节点,获得跟节点也就获得了所有的节点
   Element eleList=doc.getDocumentElement();//获得根标签stulist
   //System.out.println(eleList.getNodeName()+"  "+eleList.getNodeType()+"  "+eleList.getNodeValue());
   NodeList nlist=eleList.getChildNodes();//获得跟标签下面的子节点student,相当于几个学生对象
   for(int x=0;x<nlist.getLength();x++){
    Node n=nlist.item(x);//获得每个学生对象
    if(n.getNodeType()==1){//如果是标签(元素)节点,说明不是换行
     NodeList nodelist=n.getChildNodes();//获得每个属性
     for(int y=0;y<nodelist.getLength();y++){//遍历属性
      Node node=nodelist.item(y);
      if(node.getNodeType()==1){
       System.out.print(node.getTextContent()+"\t");//获得该标签节点所围堵的内容
      }
     }
     System.out.println();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

 }

}

 

2.sax解析

  (1).实体类

package com.entity;

public class Student5 {
 private int sno;
 private String sname;
 private int sage;
 private String ssex;
 public int getSno() {
  return sno;
 }
 public void setSno(int sno) {
  this.sno = sno;
 }
 public String getSname() {
  return sname;
 }
 public void setSname(String sname) {
  this.sname = sname;
 }
 public int getSage() {
  return sage;
 }
 public void setSage(int sage) {
  this.sage = sage;
 }
 public String getSsex() {
  return ssex;
 }
 public void setSsex(String ssex) {
  this.ssex = ssex;
 }
 public Student5(int sno, String sname, int sage, String ssex) {
  super();
  this.sno = sno;
  this.sname = sname;
  this.sage = sage;
  this.ssex = ssex;
 }
 public Student5() {
  // TODO Auto-generated constructor stub
 }
 @Override
 public String toString() {
  return "student5 [sno=" + sno + ", sname=" + sname + ", sage=" + sage
    + ", ssex=" + ssex + "]";
 }

}

 

(2).公共方法

package com.comm;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.entity.Student5;
//自定义的解析器
public class BaseDao extends DefaultHandler{
  
  String tagName;
  String DRIVER,URL,UNAME,PWD;
  Connection conn=null;
  PreparedStatement pstat=null;
  ResultSet rs=null;
 @Override
 public void startDocument() throws SAXException {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void endDocument() throws SAXException {
  // TODO Auto-generated method stub
  List<Student5> ls=this.search();
  for(Student5 stu:ls){
   System.out.println(stu);
  }
 }

 @Override
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {
  // TODO Auto-generated method stub
   tagName=qName;
 }

 @Override
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  // TODO Auto-generated method stub
  tagName="";
  if(qName.equals("student")){//每写完一个对象
   System.out.println();//换行
  }
 }

 @Override
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  // TODO Auto-generated method stub
  if(tagName.equals("DRIVER")){
    DRIVER=String.valueOf(ch,start,length);//获得文本内容
   //System.out.print(str+"\t");
   System.out.println(DRIVER);
  }
  if(tagName.equals("URL")){
    URL=String.valueOf(ch,start,length);//获得文本内容
   System.out.println(URL);
  }
  if(tagName.equals("UNAME")){
    UNAME=String.valueOf(ch,start,length);//获得文本内容
   System.out.println(UNAME);
  }
  if(tagName.equals("PWD")){
    PWD=String.valueOf(ch,start,length);//获得文本内容
   System.out.println(PWD);
  }
 }
 
 private Connection getConnection(){
  try {
   Class.forName(DRIVER);
   System.out.println("连接成功");
   conn=DriverManager.getConnection(URL,UNAME,PWD);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return conn;
 }
 private List<Student5> search(){
  Student5 s=null;
  List<Student5> liststu=new ArrayList<Student5>();
  try {
   this.getConnection();
   String sql="select * from student5";
    pstat=conn.prepareStatement(sql);
   rs=pstat.executeQuery();
   while(rs.next()){
    s=new Student5();
    s.setSname(rs.getString("sname"));
    liststu.add(s);
   }
   System.out.println("集合 的长度"+liststu.size());
  } catch (Exception e) {
   e.printStackTrace();
  }
  return liststu;
  
 }
}

 

(3).调用过程

package com.comm;


import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


public class SaxTest {

 public static void main(String[] args) {
  
  try {
   SAXParserFactory spf=SAXParserFactory.newInstance();
   SAXParser sp=spf.newSAXParser();
   sp.parse("src/pro.xml", new BaseDao()); 
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

  • 大小: 302.8 KB
分享到:
评论

相关推荐

    j2ee11:xml02:dom4j解析

    1. **配置文件解析**:例如,通过DOM4J读取和解析应用服务器的部署描述符(如web.xml或ejb-jar.xml),获取应用配置信息。 2. **数据交换**:在服务之间传递数据时,XML作为结构化的数据格式,可以方便地被转换为...

    J2EE Web Services: XML SOAP WSDL UDDI WS-I JAX-RPC JAXR SAAJ JAXP

    它包括DOM、SAX和XPath接口,分别用于树形模型、事件驱动模型和路径表达式处理XML文档。 这九大技术共同构成了J2EE Web服务的核心框架,它们相互协作,使得Java应用程序能够与其他系统通过Web服务进行高效、可靠的...

    J2EE and XML Development

    **XML解析技术**主要包括DOM(Document Object Model)和SAX(Simple API for XML)两种方式。DOM适用于需要完整加载文档内存的情况,而SAX则适合流式处理大量数据,以减少内存占用。 **XML转换**技术如XSLT...

    j2ee xml 国际化

    3. **解析XML资源**:在J2EE应用中,使用XML解析器(如DOM或SAX)加载XML资源文件,并将其转换为对象模型,以便于程序访问。 4. **选择正确的资源**:根据用户的语言设置,动态选择相应的XML资源文件。 5. **显示...

    JAVA高手解析XML配置文件的读取操作.pdf

    本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序。 在 Java 开发中,...

    J2ee and Xml Development.pdf

    - **XML解析技术**:DOM (Document Object Model)和SAX (Simple API for XML)是最常用的两种解析XML的技术。 - **XSLT**:XSLT (Extensible Stylesheet Language Transformations)用于将XML文档转换成其他格式,如...

    在j2ee项目开发中经常用到的小组件

    - `dom4j`支持DOM和SAX解析,可以根据需求选择合适的解析策略。 2. **API简介**: - `Element`:表示XML文档中的元素,可以包含属性和子元素。 - `Attribute`:表示元素的属性。 - `Document`:表示整个XML文档...

    Manning - J2EE and XML Development

    同时,了解如何利用XML工具,如DOM、SAX或StAX解析XML文档,以及XPath、XSLT和XQuery进行数据查询和转换,也是必不可少的技能。 总的来说,《Manning - J2EE and XML Development》这本书对于希望深入了解J2EE平台...

    一些J2EE代码(jdbc XML)

    例如,JDBC的连接配置信息就常常写入XML文件,通过DOM(Document Object Model)或SAX(Simple API for XML)解析器读取。 在J2EE中,XML还与JNDI(Java Naming and Directory Interface)结合,用于在应用服务器中...

    J2EE中XML配置文件的读取处理

    在Java中,有多种方式来处理XML配置文件,主要包括DOM(Document Object Model)和SAX(Simple API for XML)解析器。 DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点遍历来访问数据。...

    Java中XML配置文件的读取(sax).doc

    在Java中,读取XML配置文件可以使用多种方法,如DOM、SAX、JDOM等。其中,SAX(Simple API for XML)是一种基于事件驱动的XML解析器,它可以快速高效地读取XML文件。 二、SAX解析XML配置文件 在本文中,我们使用...

    XML和J2EE的完美结合.doc

    XML 可以通过简单的 API for XML(SAX)和文档对象模型(DOM)进行解析,使得数据能够被程序处理。例如,上述的媒体管理系统的例子,XML文档描述了各种媒体资产的元数据,如名称、描述、类型和统一资源名(URN)。...

    最新系统分析师考试复习资料(精简整理版).pdf

    * SAX (Simple API for XML) 和 DOM (Document Object Model):SAX 是一种基于事件驱动的 XML 解析技术,DOM 是一种基于树形结构的 XML 解析技术。 * 什么 是 DOM?:DOM 是一种基于树形结构的 XML 解析技术,用于...

    XML在J2EE中的应用.doc

    例如,通过使用简单的API for XML(SAX)和文档对象模型(DOM)解析XML文档,将数据加载到内存中的对象模型,便于处理和操作。此外,文档类型定义(DTDs)和XML Schema(schemas)用于定义XML文档的结构和约束,确保...

    dom4j.jar(xml操作包)

    它提供了全面且功能强大的API,使得在Java应用程序中创建、查询、修改和解析XML文档变得简单易行。DOM4J是基于DOM模型的,但同时融合了SAX和JDOM的优势,使得在处理大型XML文档时性能更优。 在XML处理中,有几种...

    j2EE常用jar包讲解

    - 解析XML文档:可以使用DOM、SAX或StAX解析器。 - 创建XML:支持动态创建XML文档和节点。 - 修改XML:可以添加、删除或修改XML元素和属性。 - XPath支持:利用XPath表达式进行快速定位和提取数据。 2. **...

    J2EE常用jar包

    2. **Dom4j**:这是一个强大的Java XML处理库,它支持DOM、SAX和JDOM的API。Dom4j简化了XML文档的读写操作,提供了元素、属性、文本节点等的便捷访问,对于处理XML文档非常方便。 3. **Struts**:Struts是一个开源...

Global site tag (gtag.js) - Google Analytics