XML学习笔记

0 篇文章 0 订阅

XML


1.XML概述

1.1 XML简介

XML: eXtensible Markup Language:可扩展标记型语言
标记型语言:html是标记型语言, 也是使用标签来操作
可扩展:html里面的标签是固定,每个标签都有特定的含义

而XML标签可以自己定义,可以写中文的标签 </person、<猫></猫>

  • xml用途
    html是用于显示数据,xml也可以显示数据(不是主要功能)
    xml主要功能,为了存储数据

  • xml是w3c组织发布的技术

  • xml的应用

    1)不同的系统之间传输数据

​ 2) 用来表示生活中有关系的数据

​ 3 )经常用在文件配置

​ 比如现在连接数据库 肯定知道数据库的用户名和密码,数据名称

​ 如果修改数据库的信息,不需要修改源代码,只要修改配置文件就可以了

1.2 XML的语法

  • Xml文件的组成部分

    1. 文档声明

      <?xml version=*'1.0'* encoding=*'UTF-8'*?>

      ​ xml表示标签的名字

      ​ version表示当前文件的版本号

      ​ encoding表示当前编码, 需要跟文件的编码产生对应关系

      ​ ps: standalone表示标记此文档是否独立

    2. 元素

      xml中的元素其实就是一个个的标签
      标签分为两种

      a: 包含标签体
      理解: 尖括号全部成对儿出现, 所有的数据都用一对儿尖括号存储
      b: 不包含标签体
      理解: 只有最外层的一个尖括号,括号用/标识结束, 内部的数据都用属性来编写

      注意事项:

      严格区分大小写;


      不能以字母或下划线开头;abc _abc

      不能以xml(或XML、Xml等)开头----W3C保留日后使用;

      名称字符之间不能有空格或制表符;

      名称字符之间不能使用冒号 : (有特殊用途)

    3. 元素的属性

      一个元素可以有多个属性,每个属性都有它自己的名称和取值。
      属性值一定要用引号(单引号或双引号)引起来。
      属性名称的命名规范与元素的命名规范相同
      元素中的属性是不允许重复的

    4. 注释

      格式:

      ​ <!—被注释的内容 – >

      注意: 注释不能嵌套定义

    5. CDATA区

      为什么要使用CDATA区域?

      ​ 如果我们在标签中写入的内容, 想要带有标签的标记符号的话, 就需要对这段内容进行转义

    6. 特殊字符

      在这里插入图片描述

      注意:

      ​ 这种转移可以达到效果, 但是如果操作的数据过多, 编写起来会非常痛苦, 所以, 可以使用CDATA区来解决此问题

2.XML约束

为什么要有约束?

XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束

2.1 DTD约束

  • 如何使用DTD约束文件?

    1. 编写DTD文件
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!ELEMENT 书架(书+)>
    
    ​    <!ELEMENT 书 (书名,作者,售价)>
    
    ​    <!ELEMENT 书名 (#PCDATA)>
    
    ​    <!ELEMENT 作者 (#PCDATA)>
    
    ​    <!ELEMENT 售价 (#PCDATA)>
    
    1. 在xml文件中引入DTD文件
      
    <!DOCTYPE 书架 SYSTEM "book.dtd">
    

    引入了写好的DTD文件后, 格式就必须跟DTD文件保持一致

  • DTD的细节

    1)语法细节

    在DTD文档中使用ELEMENT关键字来声明一个XML元素。

    • 语法:<!ELEMENT 元素名称 使用规则>

    使用规则:

    • (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

    • EMPTY:用于指示元素的主体为空。比如

    • ANY:用于指示元素的主体内容为任意类型。

    • (子元素):指示元素中包含的子元素

    • 定义子元素及描述它们的关系:

    – 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。

    • 如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)

    – 如果子元素用"|"分开,说明任选其一。

    • 如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)

    – 用+、*、?来表示元素出现的次数

    • 如果元素后面没有+*?:表示必须且只能出现一次

    • +:表示至少出现一次,一次或多次

    • *:表示可有可无,零次、一次或多次

    • ?:表示可以有也可以无,有的话只能有一次。零次或一次

2)定义属性

• 在DTD文档中使用ATTLIST关键字来为一个元素声明属性。

• 语法:

​ <!ATTLIST 元素名

​ 属性名1 属性值类型 设置说明

​ 属性名2 属性值类型 设置说明

​ …
\>

• 属性值类型:

– CDATA:表示属性的取值为普通的文本字符串

– ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)

– ID:表示属性的取值不能重复

• 设置说明

– #REQUIRED:表示该属性必须出现

– #IMPLIED:表示该属性可有可无

– #FIXED:表示属性的取值为一个固定值。语法:#FIXED “固定值”

直接值:表示属性的取值为该默认值

2.2 Schema约束

Schema约束自身就是一个XML文件,但它的扩展名通常为.xsd

一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档

XML Schema对名称空间支持得非常好

理解:

​ 名称空间: 相当于package

​ 约束文档: 编写好的Person类

​ 实例文档: 通过Person类创建对象

使用Schema约束文件

​ <约束文件根标签名 xmlns=“绑定名称空间地址”

​ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”//名称空间实例

​ xsi:schemaLocation=“绑定名称空间地址 约束文件路径”>


3. XML解析

3.1 XML解析的两种方式

DOM: 将整棵树一口气全部加载到内存当中, 我们可以非常方便的操作任意的标签和属性.
但是, 如果整棵树特别大的时候, 会出现内存溢出的问题

节点: 标签、属性、文本、甚至是换行都称之为节点

SAX: 一个节点一个节点的进行解析

3.2 DOM4J的方法概述

//获取Document对象
public static Document getDocument() throws Exception {
    //创建SAX解析对象
    SAXReader reader = new SAXReader();
    //解析XML文件,获得Document对象
    Document document = reader.read(new FileReader("src/com/itheima/city.xml"));//传入xml文件路径
    return document;
}
 Dom4J的常用方法:
 Document
	 Element getRootElement() :获取根元素对象(根标签)
 Element
 	List elements() :获取所有的子元素
	List elements(String name):根据指定的元素名称来获取相应的所有的子元素
	Element element(String name):根据指定的元素名称来获取子元素对象,如果元素名称重复,则获取第一个元素 
	String	elementText(String name) :根据指定的子元素名称,来获取子元素中的文本
	String	getText() :获取当前元素对象的文本
	void setText(String text):设置当前元素对象的文本
	String	attributeValue(String name):根据指定的属性名称获取其对应的值
	public Element addAttribute(String name,String value):根据指定的属性名称和值进行添加或者修改BeanUtils的常用方法
//将修改后的数据戏写入xml文件
public static void write2XML(Document document) throws Exception,FileNotFoundException {
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter writer = new XMLWriter(new FileOutputStream("src/com/itheima/city.xml"), format);
    writer.write(document);
}

改后的数据戏写入xml文件

public static void write2XML(Document document) throws Exception,FileNotFoundException {
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter writer = new XMLWriter(new FileOutputStream("src/com/itheima/city.xml"), format);
    writer.write(document);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值