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. watch 和 computed

    <template> <div class="hello"> <h1>{{ msg }}</h1> <h2>Essent ...

  2. 满足高密度设备存储需求 一颗ICMAXLPDDR4X 8GB就行

    通讯技术在当代无疑更新越来越快速,随着5G时代即将到来,对通讯的设备的要求也将提出更高的要求.具备AI功能的硬件设备将普及化,其智能化程度也将越来越高,同时对手机等智能移动设备的内存容量和带宽也提出了 ...

  3. 基础篇-1.1走进Java世界

    在走进Java世界之前,我们势必先了解下Java是什么?Java是一门面向对象的编程语言,是静态面向对象编程语言的代表,极好得实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.Java具有 ...

  4. Jenkins Ci系列目录

    Jenkins入门篇 1.Jenkins入门之界面概览 2.Jenkins入门之新建任务 3.Jenkins入门之导航操作 4.Jenkins入门之任务基本操作 5.Jenkins入门之执行Power ...

  5. 【基本数据结构之堆】-C++

    注意:这篇博客讲的是手写堆,喜欢用C++自带数据结构模拟的慎入 今天我们来聊一聊一种奇怪 的数据结构: 堆 为什么说这个数据结构有点奇怪呢? 先看看其他的在我眼里是正常的数据结构: 队列(近似于排队) ...

  6. 洛谷P4994 终于结束的起点 题解

    求赞,求回复,求关注~ 题目:https://www.luogu.org/problemnew/show/P4994 这道题和斐波那契数列的本质没有什么区别... 分析: 这道题应该就是一个斐波那契数 ...

  7. 编译Tomcat9源码及tomcat乱码问题解决

    因工作原因,需要从根本上优化tomcat的配置,故准备从源码入手,看看可以做哪些工作. 1. tomcat下载 tomcat最新的版本为9,下载源码的方式有3种: 1/ 官方网站 https://to ...

  8. tomcat启动成功但是没有监听8080端口

    查看tomcat日志 cd tomcat/logs tailf -1000 catlina.out 错误如下: /home/work/jdk/jdk-10.0.1/jre/bin/java: No s ...

  9. C 单链表 实现约瑟夫环

    list.h #ifndef _List_H #define _List_H typedef int ElementType; struct Node; typedef struct Node *Pt ...

  10. JVM(一):久识你名,初居我心

    聊聊JVM JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友 ...