第一:基本概念
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();
}
}
}
相关推荐
1. **配置文件解析**:例如,通过DOM4J读取和解析应用服务器的部署描述符(如web.xml或ejb-jar.xml),获取应用配置信息。 2. **数据交换**:在服务之间传递数据时,XML作为结构化的数据格式,可以方便地被转换为...
它包括DOM、SAX和XPath接口,分别用于树形模型、事件驱动模型和路径表达式处理XML文档。 这九大技术共同构成了J2EE Web服务的核心框架,它们相互协作,使得Java应用程序能够与其他系统通过Web服务进行高效、可靠的...
**XML解析技术**主要包括DOM(Document Object Model)和SAX(Simple API for XML)两种方式。DOM适用于需要完整加载文档内存的情况,而SAX则适合流式处理大量数据,以减少内存占用。 **XML转换**技术如XSLT...
3. **解析XML资源**:在J2EE应用中,使用XML解析器(如DOM或SAX)加载XML资源文件,并将其转换为对象模型,以便于程序访问。 4. **选择正确的资源**:根据用户的语言设置,动态选择相应的XML资源文件。 5. **显示...
本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序。 在 Java 开发中,...
- **XML解析技术**:DOM (Document Object Model)和SAX (Simple API for XML)是最常用的两种解析XML的技术。 - **XSLT**:XSLT (Extensible Stylesheet Language Transformations)用于将XML文档转换成其他格式,如...
- `dom4j`支持DOM和SAX解析,可以根据需求选择合适的解析策略。 2. **API简介**: - `Element`:表示XML文档中的元素,可以包含属性和子元素。 - `Attribute`:表示元素的属性。 - `Document`:表示整个XML文档...
同时,了解如何利用XML工具,如DOM、SAX或StAX解析XML文档,以及XPath、XSLT和XQuery进行数据查询和转换,也是必不可少的技能。 总的来说,《Manning - J2EE and XML Development》这本书对于希望深入了解J2EE平台...
例如,JDBC的连接配置信息就常常写入XML文件,通过DOM(Document Object Model)或SAX(Simple API for XML)解析器读取。 在J2EE中,XML还与JNDI(Java Naming and Directory Interface)结合,用于在应用服务器中...
在Java中,有多种方式来处理XML配置文件,主要包括DOM(Document Object Model)和SAX(Simple API for XML)解析器。 DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点遍历来访问数据。...
在Java中,读取XML配置文件可以使用多种方法,如DOM、SAX、JDOM等。其中,SAX(Simple API for XML)是一种基于事件驱动的XML解析器,它可以快速高效地读取XML文件。 二、SAX解析XML配置文件 在本文中,我们使用...
XML 可以通过简单的 API for XML(SAX)和文档对象模型(DOM)进行解析,使得数据能够被程序处理。例如,上述的媒体管理系统的例子,XML文档描述了各种媒体资产的元数据,如名称、描述、类型和统一资源名(URN)。...
* SAX (Simple API for XML) 和 DOM (Document Object Model):SAX 是一种基于事件驱动的 XML 解析技术,DOM 是一种基于树形结构的 XML 解析技术。 * 什么 是 DOM?:DOM 是一种基于树形结构的 XML 解析技术,用于...
例如,通过使用简单的API for XML(SAX)和文档对象模型(DOM)解析XML文档,将数据加载到内存中的对象模型,便于处理和操作。此外,文档类型定义(DTDs)和XML Schema(schemas)用于定义XML文档的结构和约束,确保...
它提供了全面且功能强大的API,使得在Java应用程序中创建、查询、修改和解析XML文档变得简单易行。DOM4J是基于DOM模型的,但同时融合了SAX和JDOM的优势,使得在处理大型XML文档时性能更优。 在XML处理中,有几种...
- 解析XML文档:可以使用DOM、SAX或StAX解析器。 - 创建XML:支持动态创建XML文档和节点。 - 修改XML:可以添加、删除或修改XML元素和属性。 - XPath支持:利用XPath表达式进行快速定位和提取数据。 2. **...
2. **Dom4j**:这是一个强大的Java XML处理库,它支持DOM、SAX和JDOM的API。Dom4j简化了XML文档的读写操作,提供了元素、属性、文本节点等的便捷访问,对于处理XML文档非常方便。 3. **Struts**:Struts是一个开源...