XML

Java Xml

  1. 掌握xml的语法
  2. 了解xml的体系
  3. 掌握xml的解析技术
  4. 掌握DOM和SAX

xml技术概述

为什么使用xml?

问题1:因为各平台之间的程序很难交流。

用java跨平台解决部分

问题2:各程序之间很难传输数据(要达到无二义性)

用普通文本解决。

xml -概念

eXtended Markup Language

是区分大小写的

a.可扩展的标记语言

b.设计用来传输和存储数据

c.允许开发人员自定义标签的名字,但是要符合一定的规范

xml和html的区别

a.xml不是html的替代,他们两个有各自的功能

b.xml设计用来传输和储存数据,重点在于数据

c.html设计用来显示数据,重点是数据的显示

xml文档组成

1.xml声明

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

还有个属性是 standalone 文档定义是否在一个文件内
默认yes

2.处理指令

<?xml-stylesheet type ="text/xsl" href = "路径"?>

3.文档类型定义

4.注释

和html注释一样,不要把注释放在标记中间。注释也不能嵌套。注释最好不要放在第一行!

5.根元素

有且只有一个根元素,是完全包括元素的元素。

6.子元素(是一个对象)

7.属性

8.属性值

<![CDATA[
    只要写在里面的内容,都会被看成文本,不管使用到标记没有。
写的是什么样,解析出来就是什么样。但是不能输入"]]>"
]]>

结构完整的xml文档

  1. 必须有xml声明语句
  2. 必须有且仅有一个根元素
  3. 标记大小写敏感
  4. 属性值用引导
  5. 标记成对
  6. 空标记关闭
  7. 元素正确嵌套

元素语法:

  1. 名称可以包含字母数字或者其他符号
  2. 但是不能以数字和下划线开头
  3. 不能以XML/xml等等
  4. 名字中不能有空格
  5. 名称中也不能有冒号(冒号留给命名空间使用)

xml技术体系

1.文档描述和校验技术:DTD和Schema 用来定义xml结构,和用于校验我们书写的xml文档是否符合规范。

2.文档转换技术(xsl/xslt)

xml 最大的特点是内容和格式分离,xml不包含如何显示数据,xsl解决了xml数据显示的问题。
xsl,xslt可以随意将xml文档转换为html,pdf文档。

3.文档查询技术(xPath/XQuery)

类似数据库和sql之间的关系

4.文档解析技术(XML DOM/SAX)

DOM是文档对象模型,定义了一组接口,这组接口可以用来解析或者创建xml文档。并且是基于对象,与平台和语言无关的。

特点:整个文档必须在内存解析和储存,对大型的文档来说耗内存,占用资源严重(会造成内存紧张)。数据都在内存,获取数据效率高。


SAX是xml简单应用程序的接口,sax解析文档是基于事件驱动的方式,sax使用回调机制来通知桌面应用程序。

特点:基于事件驱动模型,标签一个一个解析,开始标签和结束标签对应不同的事件。不会将整个文档加载到内存。所以说,占用内存少不会浪费内存资源。

缺点:要到达指定的位置,只能按照顺序处理,不能随机访问。sax只读(无法修改)。文档且只能遍历一次。

5.文档链接和定位技术(Xlink/XPointer)

文档定位技术,可以定位节点和节点集。

解析xml的方法

DOM,SAX

DOM4J:比较常用的技术。第三方提供的解析技术,所以必须要导入jar包。

创建一个xml文件

1.通过DocumentHelper 通过类产生一个文档对象

Document doc = DocumentHelper.createDocument();

2.通过document 对象创建一个根元素

Element userElement = document.addElement("user");

3.创建一个注释

userElement.addComment("this  is  user");

4.创建一个子节点

Element username = userElement.addElement("username");

5.给节点创建属性

username.addAttribute("id","username");

6.设置文本值

usename.setText("asd123131");

7.添加文档类型

document.addDocType("根元素","","文件名字");

8.设置输出格式

OutputFormat fomat =OutputFormat.createPrettyPrint();

format.setEncoding("gbk");

9.将创建好的xml内容输出到硬盘

File  f = new File("c:/"+File.separator+"dom4j.xml")
XMLWriter xw = new XMLWriter(new FileOutputStream(f),format);
xw.write(userElement);

10.通过sax读取到文件对象

SAXReader saxRead = new SAXReader();
Document doc = saxRead.read(new File("dom4j.xml"));

11.修改属性值
获取节点属性
//username/@class
表示找到username节点找到class属性
,没有@符号表是元素

List list = document.selectNodes("//username/@class");    
Iterator it = list.iterator;
while(it.hasnext()){

    //获取到的是属性对象
    Attribute attr = (Attribute)it.next();
    //获取到属性的名字和值
    attr.getName();
    attr.getValue();
    //设置属性的值
    attr.setValue("xxxx");
}

12.修改元素的值

 List list = document.selectNodes("//username/firstName");    
Iterator it = list.iterator;                    while(it.hasnext()){

    //获取到的是元素对象
    Element elu = (Element)it.next();
    //获取到元素的名字和文本值
    elu.getName();                          
    elu.getText();
    //设置文本的值
    elu.setText("xxxx");
}

13.修改过后需要再写入文件

操作和之前一样

DTD文档(文档类型定义)

全称:document type definition

主要用来约束xml文档书写的规范。 也把dtd 称为 xml的约束

常用的约束:
1. xml DTD(javaweb)
2. xml Scheme(javaee)

引入dtd文件 ,对当前xml文件进行约束

<!DOCTYPE 根元素名 (PUBLIC/SYSTEM)"(如果是SYSTEM)文件路径">

PUBLIC:如果写public表示约束的文件来自于网络文件
后面会有2个内容:第一个表示dtd的名字,第二个表示url
SYSTEM:表示约束条件来自于本地的DTD文件,直接找到路径

书写DTD文档


DTD对元素的约束:

 <!ELEMENT 元素(子元素1+,子元素2+)>

表示当前根元素下面允许存在根元素这一个子节点,可以存在一个或者多个

 <!ELEMENT 元素 (#PCDATA)>

表示允许当前元素节点下面可以出现任何文本元素

符号的含义:

1.+ : 表示该对象可以出现一次或者多次

2.* :表示该对象允许出现0次或者多次

3.? : 表示对象允许出现0次或者一次

4., :表示当前的内容必须按照顺序出现。

5.#PCDATA : 表示名字里面可以放任意文本。

6.| : 表示当前的内容可以不管顺序,可以出现可以不出现


DTD对属性的约束:

  <!ATTLIST 元素名称 属性的名字 类型 属性的特点>

eg:

<!ATTLIST username id CDATA #IMPLIED  >
表示username 的属性 id的值可以是任意字符, 可以给id可以不给id 

对于属性类型的解释:

  1. CDATA : 表示属性值可以是任何字符(数字和字母)
  2. ID :表名属性的值必须是唯一的,但是属性的值不能是以数字开头
  3. IDREF/IDREFS : 设计外键的时候

属性的特点:

  1. #REQUIRED : 表示属性必须给,不给就报错
  2. #IMPLIED :表示属性可以给 可以不给
  3. #FIXER VALUE :表示属性值必须是VALUE
  4. DEFAULT VALUE : 表示属性如果没有值就默认给VALUE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值