1、上期回忆

XML基础

1)XML的作用

1.1 作为软件配置文件

1.2 作为小型的"数据库"

2)XML语法(由w3c组织规定的)

标签:

标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。

属性:

可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单双混用。

文档声明:

<?xml version="1.0" encoding="utf-8"?>

encoding="utf-8": 打开或解析xml文档时的编码

注意:

保存xml文档时的编码 和 解析xml文档时的编码要保持一致,才能避免中文乱码问题!

3)XML解析

程序读取或操作xml文档

两种解析方式: DOM解析 vs SAX解析

DOM解析原理:一次性把xml文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。

Dom4j工具(基于DOM解析原理):

读取xml文档:

Document doc = new SAXReader().read("xml文件");

节点:

nodeIterator(); 所有节点

标签:

element("名称") 指定名称的第一个子标签对象

elementIterator("名称"); 指定名称的所有子标签对象

elements(); 所有子标签对象

属性:

attributeValue("名称") 指定名称的属性值

attribute("名称") 指定名称的属性对象

getName() 属性名称

getValue() 属性值

atributeIterator() 所有属性对象(Iterator)

attributes() 所有属性对象(List)

文本:

getText() 得到当前标签的文本

elementText("子标签名称") 得到子标签的文本

本文内容:Dom4J修改xml 、 xPath技术 、SAX解析 、XML约束学习

2、Dom4j修改xml文档

2.1 写出内容到xml文档

XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)

wirter.write(Document);

2.2 修改xml文档的API

增加:

DocumentHelper.createDocument(); 增加文档

addElement("名称") ;增加标签

addAttribute("名称","值") 增加属性

修改:

Attribute.setValue("值") 修改属性值

Element.addAtribute("同名的属性名","值") 修改同名的属性值

Element.setText("内容") 修改文本内容

删除:

Element.detach(); 删除标签

Attribute.detach(); 删除属性

3 xPath技术

3.1 xPath作用

当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦。而基于xPath解析xml文档,可以快速获取所需的节点对象。

3.2 在dom4j中如何使用xPath技术

1)导入xPath支持jar包 。 jaxen-1.1-beta-6.jar

2)使用xpath方法

List<Node> selectNodes("xpath表达式"); 查询多个节点对象

Node selectSingleNode("xpath表达式"); 查询一个节点对象

3.3 xPath语法

  • / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
  • // 相对路径 表示不分任何层次结构的选择元素。
  • * 通配符 表示匹配所有元素
  •  [] 条件 表示选择什么条件下的元素
  • @ 属性 表示选择属性节点
  • and 关系 表示条件的与关系(等价于&&)
  • text() 文本 表示选择文本内容

4 SAX解析

DOM解析原理:一次性把xml文档加载进内存,然后在内存中构建Document树

对内存要求比较要。

缺点: 不适合读取大容量的xml文件,容易导致内存溢出。

SAX解析原理: 加载一点,读取一点,处理一点。对内存要求比较低。

4.1 SAX解析工具

SAX解析工具- Sun公司提供的。内置在jdk中。org.xml.sax.*

核心的API:

SAXParser类: 用于读取和解析xml文件对象

parse(File f, DefaultHandler dh)方法: 解析xml文件

  参数一: File:表示 读取的xml文件。

  参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类

    例如:{

    1.创建SAXParser对象

               SAXParser parser=SAXParserFactory.newInstance().newSAXParser();

               2.调用parse方法

         parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());

    }

DefaultHandler类的API:

void startDocument() : 在读到文档开始时调用

void endDocument() :在读到文档结束时调用

void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用

void endElement(String uri, String localName, String qName) :读到结束标签时调用

void characters(char[] ch, int start, int length) : 读到文本内容时调用

5 总结

xml:可扩展的标记语言。

xml:用于存储数据。

XML是严格区分大小写的。

XML标签也是成对出现的。

xml有且只能有一个根节点

5.1 通过代码创建XML文档 (C#语言)

引用命名空间:System.Xml

//创建XML文档对象:

XmlDocument doc=new XmlDocument();

//创建第一行描述信息,并添加到doc中

XmlDeclaration dec=doc.CreateXmlDeclaration(”1.0”,”utf-8”,null);

doc.AppendChild(dec);

//创建根节点,并添加到doc中

XmlElement books=doc.CreateElement(”Books”);

doc.AppendChild(books);

//给根节books点创建子节点,并添加到books根节点中

XmlElement book1=doc.CreateElement(”Book”);

books.AppendChild(book1);

//给子节点book1创建子节点,并添加到book1子节点中

XmlElement name1=doc.CreateElement(”Name”);

name1.InnerText=”C#编程”;

book1.AppendChild(name1);

XmlElement price1=doc.CreateElement(”Price”);

price1.InnerText=”100”;

book1.AppendChild(price1);

XmlElement des1=doc.CreateElement(”Des”);

des1.InnerText=”好看”;

book1.AppendChild(des1);

// 保存文件

doc.Save(“Books.xml”);

5.2 DOM解析与SAX解析对比

DOM解析

SAX解析

原理: 一次性加载xml文档,不适合大容量的文件读取

原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

DOM解析可以任意进行增删改成

SAX解析只能读取

DOM解析任意读取任何位置的数据,甚至往回读

SAX解析只能从上往下,按顺序读取,不能往回读

DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。

SAX解析基于事件的编程方法。java开发编码相对复杂。

XML学习(二)的更多相关文章

  1. Xml 学习二

    使用PHPDOM模型操作XML XML的树状结构: s 1.xml文档 1.1.创建DOM树 //创建DOM树$M = new DOMDocument('1.0','utf-8');   1.2.加载 ...

  2. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  3. XML 学习介绍 收藏

    XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...

  4. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  5. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  6. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  7. Robot framework--内置库xml学习(一)

    Using lxml By default this library uses Python's standard ElementTree module for parsing XML, but it ...

  8. Android JNI学习(二)——实战JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  9. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...

随机推荐

  1. c++学习书籍推荐《深度探索C++对象模型》下载

    百度云及其他网盘下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么这本<深度探索C++对象模型>正适合你 作者简介 ...

  2. Java编程思想:擦除的神秘之处

    import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class Test ...

  3. C语言入门7-程序设计方法基础-循环结构

    程序设计方法基础-循环结构 循环三要素: 初值   循环判断条件   步长(循环增量) 循环结构在有些书籍上也称为重复结构,  即反复执行某一部分的操作. 循环三要素: 初值   循环判断条件   步 ...

  4. Linux系统安装jdk——.tar.gz版

    1.rpm.deb.tar.gz的区别: rpm格式的软件包适用于基于Red Hat发行版的系统,例如Red Hat Linux.SUSE.Fedora. deb格式的软件包则是适用于基于Debian ...

  5. c#六大设计原则(以仪器代码为例)

    [有格式的原文请到https://www.cnc6.cn/c六大设计原则/文末下载] 软件设计原则常见的有6大原则,分别为: ①单一职责原则: ②开闭原则: ③依赖倒置原则: ④里氏替换原则: ⑤接口 ...

  6. 如何简单易懂地描述REST接口编程

    网上很多关于REST的介绍,看起来都是云里雾里的,就像在看论文一样,晦涩难懂, 这里有一个链接大概可以简单明了地描述:https://www.zhihu.com/question/28557115

  7. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  8. #!/usr/bin/env bash和#!/usr/bin/bash的比较

    #!/usr/bin/env bash和#!/usr/bin/bash的比较 stackoverflow: http://stackoverflow.com/questions/16365130/th ...

  9. Openstack中用keypair生成和访问虚机的方法

    Openstack中用keypair生成和访问虚机的方法 标签:task   iso   perm   cte   生成   复制   vol   rsa   sla Openstack中用镜像文件生 ...

  10. python查漏补缺 --- 模块及异常

    1.方法定义好之后,如,def test(x) : ,此时将方法名赋值给一个新的变量,那么该变量等同于方法,可以具备test方法内部的全部功能2.导包的时候,可以使用as关键字在不同的名称下导入模块或 ...