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. Bean property 'transactionManagerBeanName' is not writable or has an invalid set

    [2017-02-07 11:38:48,458]-[localhost-startStop-1]-[org.springframework.beans.factory.support.Default ...

  2. Linux soft lockup 和 hard lockup

    一. 整体介绍 soft lockup:检测调度异常, 一般是驱动禁止调度或者阻塞比如while(1), 导致无法调度其他线程, 需要注意的是, 应用程序while(1)不会影响其调度, 只要有更高的 ...

  3. junit中test用法

    Test注解 有两个值, expected, timeout expect后面接异常类, timtout后面接时间, 符合则为ture 如 @Test (expected = NullPointExc ...

  4. 大数据 SQL Boy 脱坑指南

    不可否认的是 SQL 是一个伟大的发明,它让增删改查的操作更加地便捷化,而且 SQL 的学习成本相对其他编程语言来说较低,被逼到会写 SQL 的运营和产品我都见过不少... 大数据行业跟 SQL 更是 ...

  5. yum只下载不安装软件包

    一.通过yum自带的工具yumdownloader [root@host---- interpreter]# rpm -ql yum-utils package yum-utils is not in ...

  6. Spark on YARN资源申请

    1.spark submit参数 $ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster ...

  7. python基础一整型、bool、字符串

    1整型.bool.字符串 1.整型 --数字(int) ​ 用于比较运算的 ​ 32位 -2 ** 31 ~ 2 ** 31 -1 ​ 64位 -2 ** 63 ~ 2 ** 63 -1 ​ 基础运算 ...

  8. C#3.0新增功能02 匿名类型

    连载目录    [已更新最新开发文章,点击查看详细] 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每 ...

  9. js,ts操作dom总结

    以上面为例: js获取placeholder节点 : document.getElementsByClassName("newTicket")[0].getAttributeNod ...

  10. Android的简述2

    android提供了三种菜单类型,分别为options menu,context menu,sub menu. options menu就是通过按home键来显示,context menu需要在vie ...