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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容