厚积薄发之XML相关技术

XML基础知识

  1. xml是可扩展的标签语言
  2. 特点:标签自定义
  3. 作用:存储数据(配置文件)
  4. 书写规范:
    1.区分大小写
    2.应该有一个跟标签
    3.标签必须关闭
    <xx></xx>
    <xx/>
    4.属性必须用引号引起来
    <xx att="value"/>
    5.标签体中的空格或者制表符等内容都是作为数据内容存在的
    <xxx>aa</xxx>不等于<xxx> aa </xxx>
    6.特殊字符必须转移
    < > &
    满足上面规范的文件我们成为格式良好的xml文件,可以通过浏览器浏览
  5. 后缀名:
    .xml
  6. xml组成部分:

声明:
  告诉别人我是一个xml文件 <?xml version="1.0" encoding="UTF-8" ?>
  必须放在第一行
  必须顶格写
元素 (标签):
  格式:<xx></xx>和<xx/>
  要求:
  1.必须关闭
  2.标签名不能 xml Xml XML 等等开头
  3.标签名中不能出现空格或者":"等等特殊字符
属性:
  格式:<xx 属性名="属性值"/>
  要求:属性值必须引起来
注释:
  和html一样<!---->
CDATA:
  由于xml文件中的特殊字符必须需要转义,但是如果需要转义的地方很多,就比较麻烦,通过CDATA可以保证数据的原样输出
  格式:
  <![CDATA[
  原样输出的内容
  ]]>

XML的解析技术

  • 解析方式:
  1. sax解析 特点:逐行解析 只能查询 不能增删查
  2. dom解析 特点一次性加载到内存中,形成一颗dom树,可以对dom树进行crud操作
  • 解析技术:
  1. JAXP
  2. JDom
  3. jsoup
  4. dom4j:经常使用的解析开发包,hibernate底层也是采用dom4j来进行解析

dom4j的使用步骤

  1. 导入jar包
  2. 创建核心对象 SAXReader
  3. 将xml文档加载到内存中形成一颗dom树
  4. 获取根节点
  5. 通过根节点获取其他节点(文本节点,元素节点,属性节点

dom4j的使用示例

  1.   导入jar   dom4j-1.6.1.jar
  2.   在项目下创建测试的xml文档   我这里创建的是test.xml
  3. 创建测试类

Xpath解析技术

  1. 由于dom4j的解析只能从根节点开始来获取到相应的节点(属性节点,元素节点,文本节点);不够灵活,Xpath解析是基于dom4j的基础上进行扩展的,所以也要应用到dom4j的jar包
  2. Xpath的使用步骤
    1.  导入jar包  dom4j-1.6.1.jar 和jaxen-1.1-beta-6.jar
    2. 加载dom树
    3. 使用api
      selectNode("表达式");
      selectSingleNode("表达式");
    4. 表达式的写法:
      / 从根节点选取
      // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
      例如一个标签下有一个id属性且有值 id=2;
      //元素名[@属性名=‘属性值‘]
      //元素名[@id=‘2‘]
  3. Xpath演示

关于dom4j对xml文档的增删改查的方法

  1. 增加

     1     // 添加元素
     2     @Test
     3     public void method4() throws Exception {
     4         // 得到Document
     5         SAXReader reader = new SAXReader();
     6         Document doc = reader.read(new File("J:\\ecplisework\\testJar\\xml\\test.xml"));
     7
     8         // 获取root元素
     9         Element root = doc.getRootElement();
    10         Element stuEle = root.addElement("student"); // 添加了student元素
    11         // 给stuEle添加属性,名为number,值为1003
    12         stuEle.addAttribute("number", "1003");
    13         // 分别为stuEle添加名为name、age、sex的子元素,并为子元素设置文本内容
    14         stuEle.addElement("name").setText("wangWu");
    15         stuEle.addElement("age").setText("18");
    16         stuEle.addElement("sex").setText("male");
    17
    18         // 设置保存的格式化器 1. \t,使用什么来完成缩进 2. true, 是否要添加换行
    19         OutputFormat format = new OutputFormat("\t", true);
    20         format.setTrimText(true); // 去掉空白
    21         // 在创建Writer时,指定格式化器
    22         XMLWriter writer = new XMLWriter(new FileOutputStream("J:\\ecplisework\\testJar\\xml\\test.xml"), format);
    23         writer.write(doc);
    24     }
  2. 修改xml操作

     1 // 修改元素
     2     @Test
     3     public void method5() throws Exception {
     4
     5         // 得到Document
     6         SAXReader reader = new SAXReader();
     7         Document doc = reader.read(new File("J:\\ecplisework\\testJar\\xml\\test.xml"));
     8
     9         // 使用XPath找到符合条件的元素
    10         // 查询student元素,条件是number属性的值为1003
    11         Element stuEle = (Element) doc.selectSingleNode("//student[@number=‘1003‘]");
    12         // 修改stuEle的age子元素内容为81
    13         stuEle.element("age").setText("81");
    14         // 修改stuEle的sex子元素的内容为female
    15         stuEle.element("sex").setText("female");
    16         // 设置保存的格式化器 1. \t,使用什么来完成缩进 2. true, 是否要添加换行
    17         OutputFormat format = new OutputFormat("\t", true);
    18         format.setTrimText(true); // 去掉空白
    19         // 在创建Writer时,指定格式化器
    20         XMLWriter writer = new XMLWriter(new FileOutputStream("J:\\ecplisework\\testJar\\xml\\test.xml"), format);
    21         writer.write(doc);
    22
    23     }
  3. 删除节点

     1 // 删除元素
     2     @Test
     3     public void method6() throws Exception {
     4
     5         // 得到Document
     6         SAXReader reader = new SAXReader();
     7         Document doc = reader.read(new File("J:\\ecplisework\\testJar\\xml\\test.xml"));
     8
     9         // 查找student元素,条件是name子元素的文本内容为wangWu
    10         Element stuEle = (Element) doc.selectSingleNode("//student[name=‘wangWu‘]");
    11
    12         // 2. 获取父元素,使用父元素删除指定子元素
    13         stuEle.getParent().remove(stuEle);
    14
    15         // 设置保存的格式化器 1. \t,使用什么来完成缩进 2. true, 是否要添加换行
    16         OutputFormat format = new OutputFormat("\t", true);
    17         format.setTrimText(true); // 去掉空白
    18         // 在创建Writer时,指定格式化器
    19         XMLWriter writer = new XMLWriter(new FileOutputStream("J:\\ecplisework\\testJar\\xml\\test.xml"), format);
    20         writer.write(doc);
    21     }
  4. 查询

     1 // 查找
     2     @Test
     3     public void method() throws Exception {
     4         // 创建一个核心对象 SAXReader
     5                 SAXReader reader = new SAXReader();
     6                 // 获取dom树
     7                 Document doc = reader.read("J:\\ecplisework\\testJar\\xml\\test.xml");
     8                 // 获取根节点
     9                 Element root = doc.getRootElement();
    10                 // 获取其他子节点
    11                 List<Element> element = root.elements();
    12                 // 遍历子节点
    13                 for (Element ele : element) {
    14                     // 获取bean元素节点的name文本节点
    15                     String elementText = ele.elementText("name");
    16                     System.out.println(elementText);
    17
    18                 }
    19                 // 也可以获取跟节点的属性
    20                 System.out.println(root.attributeValue("version"));
    21     }

DOM4J无论在那个方面都是非常出色的。如今越来越多的Java软件在使用DOM4J来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了DOM4J。

时间: 2024-11-13 04:22:21

厚积薄发之XML相关技术的相关文章

XML涉及到的相关技术(编写+解析)

xml:即可扩展标记语言,用于描述关系型数据,也经常用作软件的配置文件:     1,编写xml文档一般基于一个约束文档,该文档用于规定xml的书写规范,常用的约束技术有        (1)XML DTD(早期技术) (2)XML Schema(现在主流技术)     2,编写好xml文档后,就需要对该文档进行解析,常见解析方式有两种:        (1)DOM解析(SUN官方标准)(2)sax解析(实际应用标准)     常用的解析开发包:Jaxp(SUN)(最差),Jdom,dom4j(

C/S通信模型和相关技术要点

几乎所有的项目中,都会涉及到客户端和服务端.而客户端与服务器之间的通信又是一个很常见但又有需要问题的技术问题. 首先,连接方式有长连接和短连接.先看看概念. 长连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西: 长连接:系统通讯连接建立后就一直保持. 短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭: 通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此

java xml处理技术一(解析xml和生存xml的技术)

java xml处理技术一 XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专门的解析程序. XML 出现以后解决了这个问题,程序面对的是有固定格式的 XML 文件,只要通过标准 API 就可以进行 XML 文件的处理. XML 文件在案例系统中应用是很广泛的,比如 ClientConfig.xml . ServerConfig.xml 文件就是使用 X

SAAS相关技术要点

这篇文章本来是我们开发组内部用的一个小文档.因为我们公司以前没有做SAAS的经验,就成立了一个小组做一做这方面的技术前探,我是成员之一.这篇文档想从宏观的层面把开发一个SAAS应用所要用到的技术点稍微梳理一下,便于指导后面的技术前探工作.之所以发在这里,是因为自己相关的研发经验太缺乏,可能有些技术盲点是自己根本没能考虑到的,希望园子里的各位大牛多多指导. 一.聚焦“三头怪” 在MS的官方文档中,把构建一个足够成熟的SAAS(MS简单列出了SAAS应用的4级成熟度)所面临的3个主要挑战:可配置性,

Portal架构相关技术汇总

一.什么是Portal? Portal技术强调以用户为中心,简而言之就是整合现有企业中遗留的各种系统,使之有统一的入口,实现信息的集中访问. 二.Portal中主要应用的功能 1)SSO-Single Sign-On 主要开源SSO协议有 ①Jasig CAS CAS 就是 Central Authentication Service(中央认证服务)的意思,CAS 实际上这是一种 SSO 协议. ②OpenID OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地

我对大数据相关技术的学习心得及理解

本篇为这一段时间以来我对大数据相关技术的学习心得及理解,主要涉及以下几个方面: noSql, 集群, 数据挖掘, 机器学习,云计算,大数据,以及Hadoop和Spark.主要都是一些初级的概念澄清之类的东西,并且比较凌乱,慎入.* 1. NoSQL我的理解是,NoSQL主要用于存储一些非结构化数据, 是关系数据库与文件存储方式(比如视频文件就适合使用文件的方式存储)的过度. ** 1.1 NoSQL的分类: 列存储: Hbase(BigTable的开源实现),可存储结构化数据. Cassandr

第五次作业-系统实现可能需要用到的技术,及学习相关技术的心得

一.系统实现可能需要用到的技术: 我们团队的项目是学生作业管理系统,为了实现这个系统,我们可能需要用到的技术有面向对象编程.UML建模.ASP.NET.C#.SQL server.JQuery 等. (1)面向对象程序设计(Object-Oriented Programming)是一种起源于六十年代,发展已经将近三十年的程序设计思想.对象是对现实世界实体的模拟,由现实实体的过程或信息来定义.一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的

(1-1)Java领域的相关技术

JAVA主要分为3类:JavaEE.JavaSE和JavaME.其中,JavaEE是网络编程,主要应用在与网络软件.如各类网站.ERP软件等等:JavaSE是企业级开发,如QQ.各种音乐视频播放器等:而JavaME是手机开发,如各类手机游戏.手机软件等! (1-1)Java领域的相关技术,布布扣,bubuko.com

http缓存与cdn相关技术

摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料,因此整个过程下来,对这方面的知识影响更加深刻.来来来,接下来总结总结 一 http缓存 1.1缓存的分类: http中具有缓存功能的是:1.浏览器缓存.  2.缓存代理服务器. 1.2 什么是缓存: http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副本,就可以从本地存储设备而 不是从原始服务器中提取这个文档. 1.3 缓存的好处有: 1. 减少了冗余的