本文总结Dom,sax解析,  使用Java作为工具解析xml文档。

1 Dom

综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的标签(属性)和Dom树

中的节点一 一对应。节点都是对象,这样就可以使用对象的属性或者方法就操作xml。

缺点:每一种技术都会有缺点,Dom解析的不足之处在于不是处理数据量大的xml文件,原因:Dom技术是直接将xml解析成树,装入到内存中,

这样消耗的资源会比较多。

以下面Myclass.xml为例

<?xml version="1.0" encoding="utf-8"?>
<class>
<stu id="sp001">
<name>小明</name>
<age>12</age>
<Math>100</Math>
<English>90</English>
</stu>
<stu id="sp002">
<name>小李</name>
<age>12</age>
<Math>98</Math>
<English>90</English>
</stu>
</class>

  

(1)代码实现

先解析xml 获取文档对象Document

 public  void GetDocument(url) {

      DocumentBuilderfactory   dbf=DocumentBuilderfactory.newInstance();//创建工厂
DocumentBuilder bu=dbf.newDocumentBuilder();//Dom解析器
Document document=bu.Parse(url) //解释文档返回文档对象,url为路径; }

  

*  接下来以添加一个节点:

public addNode(Document doc){
//创建节点
Element stu=doc.CreateElement("stu");
Element name=doc.CreateElement("name");
Element age=doc.CreateElement("age");
//添加属性和文本
stu.setAttribute("id","sp003");//id属性
name.setTextContent("小刘");
age.setTextContent("11");
//将节点添加stu中再到文档中
stu.appendChild(name);
stu.appendChild(age);
doc.getDocumentElement.getChild(stu);//添加到xml文档中; //调用刷新函数(自定义),也是就三句话:工厂,对象,刷新; }

 注释:上面讲到了刷新函数,干什么的?

我们将stu节点添加到文档中,注意不是直接到xml的,也是在内存中,只有刷新到xml文档中才会使得xml中可以看到新加的节点;

所以要刷,具体怎么写,我真是忘记了! 这里记为 refresh();

*  至于修改,删除那就差不多的。不介绍

(2)居然Dom技术可以作用于xml和html,那有什么相似的地方?

我是先学习htmlDom的,在html中我们通常使用属性去修改,设置值;比如

document.getElementById('stu')..id="xxx";//添加id属性(说是设置也行);

document.getElementById('name')..innerText="xxx";//添加文本;

html中基本上使用属性,方法使用的不多,原因简单:属性操作不用考虑"浏览器兼容";

对比xml中使用方法(基本上没有属性),解析xml文档也就没有什么“兼容不兼容”的事情!

所以html会了,xml的解析也就差不多了。

2  sax解析

综述:

sax技术可以用来处理xml比较大的情况,Dom技术是做不到的
           为什么Dom不能?sax可以?
           原因就是Dom技术是直接将xml解析成树,装入到内存中,这样消耗的资源会比较多。
           所以不适合处理数据较多时xml。sax技术不一样,他不用直接将xml装入到内存中,只是将需要的数据
           装进去。不会大量的消耗内存资源。sax技术适合处理遍历,读取。不适合(不能)用来修改数据。

原理 :

sax技术主要是使用DefaultHander事件处理对象;

比如里面有方法:

&     public void startElement(String uri, String localName, String qName, Attributes attributes)  {//code}

每一次访问<>都会调用一次;

看参数:  qName是<>里的标签名,比如:<stu id="sp002">那么qName就是stu.。attributes数组,用来保存标签的属性。比如

attributes.getValue("id"));就是"sp002"; 我们可以在code中处理,得到我们需要的!

&     public void characters(char[] ch, int start, int length) {} //查看DefaultHander文档

(1)实现

* 将xml文件和事件处理对象关联起来

 public SaxFunction(url){
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser sax=factory.newSAXParser();
sax.parse(url,new MyHander()); //将xml文件和事件处理对象关联起来,这个对象是自定义的!
}

   *  重写事件对象DEfaultHander的方法

class MyHander extends DefaultHandler{
private String name=""; // 关联属性;
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String con=new String(ch,start,length);
if(!con.trim().equals("")&&(this.name.equals(name) || this.name.equals("age")))
System.out.println(con);
} @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName=="stu")
{
System.out.println(attributes.getValue("id"));
} } }

  

注释:我们可以看到上面代码可拿到  属性"id",元素name,age的文本; 都是sax技术是不能添加,删除,修改数据的。这就是他的缺点。

其他xml解析技术如:JDom,Dom4j。有时间在讨论!

xml解析技术的更多相关文章

  1. Android实现XML解析技术

    转载:Android实现XML解析技术 本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为 ...

  2. XML解析技术研究(一)

      摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键.本文介绍了XML解析技术的研究动向,分析和比较了4种XML解析技术的优劣,并归纳总结了应 ...

  3. Java数据库编程、XML解析技术

    数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...

  4. 一文读懂四种常见的XML解析技术

    之前的文章我们讲解了<XML系列教程之Schema技术_上海尚学堂java培训技术干货><XML的概念.特点与作用.XML申明_上海Java培训技术干货>,大家可以点击回顾一下 ...

  5. Java数据库编程及Java XML解析技术

    1.JDBC概述 A.  什么是JDBC? Java DataBase Connectivity:是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成.通过这些类和接口 ...

  6. XML解析技术简介——(一)

  7. XML 解析技术

    xml 解析方式有两种: dom 解析和 sax 解析: 针对着两种解析方式,有三种解析器: sun公司的 jaxp dom4j 组织的 dom4j jdom 组织的 jdom dom 解析XML : ...

  8. JAVA数据库编程、JAVA XML解析技术

    JDBC概述 JDBC是JAVA中提供的数据库编程API curd :数据库增删改 链接字符串:String url = "mysql :/localhost :3306/jdbc/&quo ...

  9. XML解析技术-dom4j

随机推荐

  1. 【C++】多态性(函数重载与虚函数)

    多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. ...

  2. Android应用架构之Android MVP使用

    前两篇已经将Retrofit和RxAndroid应用到了项目中,这篇本打算直接将Dagger2引进项目,但是考虑到整个项目结构,就来个结构整理吧,一起来看看网上炒得火热MVP模式. 说到MVP就不得不 ...

  3. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)

    脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...

  4. ORACLE 利用 REPLACE函数替换字段字符串

    REPLACE(string,s1,s2) string 希望被替换的字符或变量 s1 被替换的字符串 s2 要替换的字符串 SQL> select replace(he love you,he ...

  5. EXCEL中对1个单元格中多个数字求和

    如A1=3779.3759.3769.3781.3750,A2对A1中4个数字求和怎么求!请高手赐教! 方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 方法二 ...

  6. Node.js起步 -- (1)

    先来简单介绍nodeJS 我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行. nodeJS其实可以这么理解,它是另外 ...

  7. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  8. laravel实现数据库多库配置,读写分离配置或者多读写分离配置

    'connections' => array( //默认mysql配置,访问test库 'mysql' => array( 'driver' => 'mysql', 'host' = ...

  9. 最全的 JavaScript 知识总结

    来源于:http://gcdn.gcpowertools.com.cn/showtopic-28404-1-3.html?utm_source=gold.xitu.io&utm_medium= ...

  10. JQuery选择器

    动态修改样式 $("#div1").attr("display","block"); //有问题 $("#div1"). ...