xml

1. xml简介:

  • eXtensible Markup Language:可扩展标记语言
    标记型语言:html是标记型语言,都是用标签操作
    可扩展:html里面的标签是固定的,每个标签都有特定的含义
    标签可以自定义,可以写成中文的标签eg:<猫></猫>
  • xml的用途
    主要的功能是存储数据,也可以显示数据
  • xml是w3c组织发布的技术
  • xml有两个版本1.0和1.1
    经常用的是1.0,因为1.1向下兼容

2. xml的应用

  • 不同的系统之间传输数据


    屏幕快照 2019-04-11 下午9.19.40.png
  • 用来表示生活中有关系的数据


    屏幕快照 2019-04-11 下午9.21.13.png
  • 经常用来配置文件

3. xml语法


4. xml的文档声明

文件后缀名 .xml
第一步必须有个文档声明,表示写了xml文件的内容

<?xml version="1.0" encoding="gbk"?>
//必须写在第一行第一列
  • 属性:
    version:xml版本1.0
    encoding:xml编码 gbk utf-8 iso8859-1(不包含中文)
    standalone:是否依赖其他文件 yes/no
  • xml中文乱码问题


    屏幕快照 2019-04-11 下午9.37.42.png

    保存时候的编码和设置打开时的编码一致,不会出现乱码


5. 定义元素(标签)

  • 标签的定义有开始必须有结束
    标签没有内容,可以在标签内结束eg:<a/>
    标签可以合理嵌套
    一个xml文档只有一个跟标签,其他标签必须在这个标签下面写
    在xml中空格和换行都会当成代码解析
<aa>11111</aa>
<aa>
  11111
</aa>
//两个表示的不一样
  • 命名规范:
    可以是中文
    大小写区分
    不能用数字和下划线开头
    不能以xml、XML、xmla等开头
    不能包含空格和冒号

6. 定义属性

  • 属性定义的要求:
    一个标签可以有多个属性
    属性名称不能相同
    属性名称和属性值之间用=,属性值使用引号包起来

7. 注释

< !-- -->

注释不能嵌套
注释不能放在第一行


8. 特殊字符

转义字符

特殊字符 替代字符
& &
< &lt ; //没有空格
> &gt ;
" &quo t;
' &apos ;

9. CDATA区

可以解决多个字符都需要转译的操作
写法
<![CDATA[.....]]>
把特殊字符当作文本内容而不是标签

10. PI指令

可以在xm中设置样式

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="css的路径"?>
//对中文的标签名称不起作用

11.xml的约束

  • 约束的技术:dtd约束,schema约束

12. dtd快速入门

  • 创建一个文件后缀.dtd
    步骤:
    1. 看xml中有多少个元素,有几个元素,在dtd文件中写几个 <!ELEMENT>
    2. 判断元素是否是简单元素
      简单元素:没有子元素的元素
      <!ELEMENT 元素名称(#PCDATA)>
      复杂元素:有子元素的元素
      <!ELEMENT 元素名称(子元素)>
    3. 在xml中引入dtd文件
      <!DOCTYPE person SYSTEM"dtd文件的路径">
      如果打开xml文件使用浏览器打开的,浏览器只负责校验xml的语法,不负责校验约束

13. dtd的三种引入方式

  • 引入外部文件
`<!DOCTYPE person SYSTEM"dtd文件的路径">`
  • 使用内部的dtd文件
<!DOCTYPE 根元素名称  [
      <!ELEMENT person(name, age)>
      <!ELEMENT person(#PCDATA)>
      <!ELEMENT age(#PCDSTS)>
]>
  • 使用外部的dtd文件
    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
    学习到sturts2使用配置文件,使用外部的DTD文件

14.使用dtd定义元素

语法<!ELEMENT 元素名约束>

  • 简单元素:没有子元素的元素
    <!ELEMENT 元素名称(#PCDATA)>:约束name是字符串类型;
    <EMPTY>:元素为空(没有内容)
    <ANY>:任意
  • 复杂元素:有子元素的元素
    <!ELEMENT 元素名称(子元素)>
    表示元素出现的次数:+:表示一次或多次;?:表示零次或者一次;* :表示零次或者多次
    <!ELEMENT 元素名称 (name, age,sex,school)>:子元素用,隔开,表示元素出现的顺序; |:表示只能出现其中的一个

15.使用dtd定义属性

  • 语法:
    1. CDATA:字符串
<!ATTLIST birthday ID1 CDATA #REQUIRED>
  1. 枚举:表示只能在一定的范围里面选择出现的值,
<!ATTLIST age ID2 (aa|bb|cc) #REQUIRED>
  1. ID:值只能是字母或者数字开头
  • 属性的约束:
    1. #REQUIRED:属性必须存在
    2. #IMPLIED:属性可有可无
    3. #FIXED:表示一个固定值#FIXED "aaa";属性的值必须是设置的这个值
<! ATTLIST sex ID CDATA #FIXED "aaa">
  1. 直接值:不写属性,使用直接值,写了属性,使用设置的值
<!ATTLIST school ID CDATA "www">

16. 实体的定义

语法:<!ELEMENT TEST "hhhhhh">
使用实体:&实体名称;
注意:定义实体需要写在内部dtd里面,如果写在外部dtd里面,有些浏览器鞋,内容得不到


17. xml的解析简介

解析方式:两种:dom和sax方式
dom解析 :



sam解析:


  • 想要解析xml,首先需要解析器
    不同的公司和组织提供了针对dom和sax方式的解析器,通过api方式提供:
    sum公司,dom4j组织,jdom组织,针对dom和sax分别提供了:jaxp、dom4j、jdom解析器

18. jaxp

jaxp时javase的一部分

  • jaxp解析器在jdk的javax.xml.parsers包里面
    四个类:分别是针对dom和sax解析使用的类
    1. dom:
      DocumentBuilder:解析器类
      这个类是一个抽象类,不能new,此类的实力可以从 DocumentBuilderFactory.newDocumentBulider()方法获得
      一个方法,可一个解析 xml parse("xml路径")返回的是Document整个文档
      放回的document是一个借口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找
      DocumentBuliderFactory:解析器工厂
      这个类也是一个抽象类,不能new
      newInstanse() 获取DocumentBuilderFactory的实例
      2.sax:
      SAXParser:解析器类
      SAXParserFactory:解析器工厂
  1. 使用jaxp
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容