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. Python Day_2

    入门任何一门编程语言,前面总是离不开变量,字符串这些概念,而且这些东西在往后的日子里,有着至关重要的存在.因为不管我们写什么程序,都要用到变量以及字符串. 变量 首先,我们的变量在定义的时候,是不需要 ...

  2. 剑指offer第二版-1.赋值运算符函数

    面试题1:赋值运算符函数题目要求:为自定义类添加赋值运算符函数,考察一些细节点的书写.

  3. 【题解】【P3383 【模板】线性筛素数】

    看完这篇博客你就懂了 原题链接 代码: #include<bits/stdc++.h> using namespace std; bool isPrime(int num) { if(nu ...

  4. [HNOI2015]亚瑟王[期望DP]

    也许更好的阅读体验 \(\mathcal{Description}\) 给出\(n\)个技能,每个技能按输入顺序有\(p[i]\)的概率释放并造成\(d[i]\)的伤害.每轮游戏从前往后顺序查看每个技 ...

  5. docker实战(一)之Tomcat的安装

           docker号称分分钟就可以将环境构建完成,这话一点也不假,因为docker在使用软件时只需要从官方 仓库中拉取对应的镜像就行了.docker的使用前需要了解两个名词--镜像和容器.这两 ...

  6. Flask项目常见面试问题

    一.你的项目中缓存粒度是如何选择的? 缓存粒度一共分为4种. 1.缓存某个数值:一个键只保存一个值,性价比较低,使用率低,如果存储的话我们使用redis的String 2.缓存数据对象:数据库记录对应 ...

  7. python函数闭包-装饰器-03

    可调用对象 callable()  # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即  callable(对象)  返回为  True  的对象 x = 1 print(cal ...

  8. php 自己封装一个调用第三方接口的函数

    ①在php.ini中开启php_curl扩展(必须开启) ②建议在php.ini中开启php_openssl扩展(本身不是curl必须的,是调用一些第三方接口需要的 ③如果以上操作重启apache后, ...

  9. spring boot入门篇

    Spring Boot[快速入门]   Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...

  10. 安装解压版MySQL5.76及以上版本 出现服务正在启动-服务无法启动的问题

     最近重装了系统,去MySQL官网下载了最新的MySQL5.7.9,我选择的是解压版,安装之后启动服务的时候,提示服务无法启动,在网上找了很多教程,弄了很久都没有弄好,后来还是决定去英文官网找找答案, ...