Web学习第五天:xml

版权声明:斌哥版权,如有雷同,纯属虚构 https://blog.csdn.net/iostream992/article/details/85150554

1、表单提交方式

<form>

<input type="submit"/>

</form>

-使用buttton提交表单

-使用超链接提交

--onclick:鼠标点击事件

--onchange:改变内容(一般和select一起使用)

--onfocus:得到焦点

--onblur:失去焦点

2、xml的简介

Extensible Markup Language可扩展标记型语言

--标记性语言:html是标记型语言

-也是使用标签来进行操作的

--可拓展:

-html里面的标签都是固定的,每个标签都有特定的含义

-xml标签可以自己定义,可以写中文的标签

<person></person>、<猫></猫>

xml用途:

HTML是用于显示数据,xml也可以进行显示数据(不是主要功能)

xml主要功能,为了存储数据

xml是w3c组织发布的技术

xml有两个版本 1.0  1.1

-使用都是1.0版本(1.1不向下兼容)

3、xml的应用

不同系统之间传输数据

-qq之间的数据传输

-画图分析

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

经常用在配置文件

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

-如果我们要修改数据库信息,不需要修改源代码,主要修改配置文件就可以了

 

4、xml的语法

1、xml的文档说明(***)

创建一个文件 后缀名是 .xml

如果写一个xml,第一步必须要有一个文档声明(写了文档声明后,表示写xml文件的内容)

<?xml version="1.0" encoding="gbk"?>

文档声明必须在第一行第一列

属性:

-version:xml的版本(使用1.0)

-encoding:xml编码 gbk utf-8 iso8859-1(不包含中文)

-standalone:是否需要依赖其他的文件(yes/no)

xml的乱码解决(画图分析乱码问题)

保存时和打开时的编码一致就不会出现乱码

 

2、定义元素(标签)(***)

3、定义属性(***)

4、注释(***)

5、特殊字符(***)

6、CDATA区(了解)

7、PI指令(了解)

 

5、xml元素定义

-标签定义

-标签定义有开始必须要有结束

<person></person>

-标签没有内容可以在标签内结束

 <aa/>

-标签可以嵌套,但是不可以不合理嵌套

合理嵌套:<a><b></b></a>

不合理嵌套:<a><b></a></b>

-一个xml中只能有一个根标签,其他标签都是这个标签下面的标签

-在xml中把空格和换行都当成内容来解析

<aa>123</aa>

<aa>

123

</aa>

-xml标签可以是中文

-xml标签的命名规则

1、xml代码区分大小写

<p>与<P>不一样

2、xml标签不能与下划线(_)开头

<1a> <_b>怎样是不正确的

3、xml的标签不能以xml、XML、Xml等开头

<xmla>..都是不正确的

4、xml的标签不能包含空格和冒号

<a b><b:c> 这些都是不正确的

 

6、xml中属性的定义

html是标记型文档,可以有属性

xml也是标记型文档,可以有属性

<person id1="aaa" id2="sss"></persion>

属性定义的要求

1、一个标签上可以有多个属性

<person id1="aaa" id2="sss"></persion>

2、属性名称不能相同

<person id1="aaa" id2="sss"></persion>

3、属性名称和属性值时间使用=,属性值使用引号包起来(单引号或者双引号)

4、xml属性的名称规范和元素的名称规范是一致的

 

7、xml中的注释

写法:<!-- xml的注释-->

注释也不能放到第一行,第一行第一列必须放文档声明

 

 

8、xml中的特殊字符

如果想要在xm中显示啊a<b,不能正常显示,因为把<当标签

 

9、CDATA区

可以解决多个字符都需要转义的操作

把这些内容都放到CDATA区里面就不需要转义了

写法

< ! [CDATA[内容] ] >

把特殊字符当作文本内容而不是标签

 

10、PI指令(处理指令)

可以在xml中设置样式

注:设置样式对中文标签名称不起作用

xml语法总结

 

11、xml约束

为什么要约束?

-比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age 等,但是如果xml文件中写了一个标签<猫></猫>,发现可以正常显示,因为符合语法规范。但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。

 

xml的约束技术:dtd技术和schema约束(看懂)

 

12、dtd的快速入门

创建一个文件 后缀名 .dtd

步骤:

1、看xml中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>

2、判断元素是简单元素还是复杂元素

-复杂元素:有子元素的元素

<!ELEMENT 元素名称 (子元素)>

-简单元素:

<!ELEMENT 元素名称 (#PCDATA)>

3、需要在xml文件中引入dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

 

打开xml文件使用浏览器打开的,浏览器只负责检验xml语法,不负责校验约束

如果想要校验xml的约束,需要使用工具

-创建一个项目 day05

-在day05的src目录下面创建一个xml文件和一个dtd文件

-当xml中引入对dtd文件之后,比如只能出现name age,多谢了一个a就会出错

 

注释快捷键 Ctrl+Shift+/

13、dtd的三种引入方式

1、引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

2、使用内部dtd的文件

3、使用外部的dtd文件

-后面学到框架 struts2使用配置文件 使用外部的dtd文件

4、使用dtd定义元素

语法:<!ELEMENT 元素名 约束>

简单元素:没有子元素的元素

<!ELEMENT name (#PCDATA)>

-(#PCDATA):约束name是字符串类型

-EMPTY:表示元素为空(没有内容)

-ANY:任意

复杂元素:

 

 

 

14、使用dtd定义属性

语法:<!ATTLIST 元素名称

属性名称 属性类型 属性的约束>

属性类型:

-CDATA:字符串

 

-枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个

--(aa|bb|cc)红绿灯效果

 - ID:值只能是字母或者下划线开头

  • <!ATTLIST name

                                       ID3 ID #REQUIRED>

属性的约束:

  • #REQUIRED:改属性必须出现

  • #IMPLIED:表示属性可有可无

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

    • 属性的值必须是设定

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

    • 不写属性,使用直接值

    • 写了属性使用设置的值

 

16、实体的定义

语法:<!ENTITY 实体名称 "实体的值">

<!ENTITY TEST "HAHAHEHE">

使用实体 &实体名称;比如 &TEST;

  • 注意:

    • 定义实体需要协助内部dtd里面

    • 如果写在外部dtd里面,有些浏览器内容得不到

17、xml的解析的简介(写到java代码)(今天的主要内容)

  • xml是标记型文档

  • js使用dom解析标记型文档?

    • 根据HTML的层次结构,在内存分配一个树型结构,把HTML的标签属性和文本封装成对象

    • document对象、element对象那个、属性对象、文本对象、Node节点对象

    • xml的解析方式(技术):dom和sax

      • 画图分析使用dom和sax解析过程

 

  • dom解析和sax解析的区别

    • dom方式解析

      • 根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象

      • 缺点:如果文件过大,造成内存溢出

      • 优点:很方便实现增删改查操作

    • sax方式解析

      • 采用事件驱动,边读边解析

        • 冲上到下,一行一行的解析,解析到某个对象,返回对象名称

      • 缺点:不能实现增删改查操作

      • 优点:如果文件过大,不会造成内存溢出,方便实现查询操作

  • 想要解析xml,实现需要解析器

  • 不同公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供

    • sun公司提供了针对dom和sax的解析器 jaxp

    • dom4j组织,针对dom和sax的解析器  dom4j(**实际开发中**)

    • jdom组织,针对dom和sax的解析器 jdom

 

 

18、jaxp的api的查看

  • jaxp是javase的一部分

  • jaxp解析器在jdk的javax.xml.parsers包里面

    • 四个类:分别是针对dom和sax解析使用的类

    • dom:

      • DocumentBuilder:解析器类

        • 这个类是一个抽象类,不能new

        • 一个方法,可以解析xml  parse("xml路径")

        • 返回的document是一个接口,父节点是Node,如果在document里面找不到需要的发放,到Node里面去找

        • 在document里面方法

          • getElementByTagName(String tagName)

            • 这个方法可以达到标签

            • 返回集合 NodeList

          • createElement(String tagName)

            • 创建标签

          • createTextNode(String data)

            • 创建文本

          • appendChild(Node newChild)

            • 把文本添加到标签的下面

          • removeChild(Node oldChild)

            • 删除节点

          • getParentNode()

            • 获取父节点

          • NodeList list

            • getLength()

              • 得到集合的长度

            • item(int index)

              • 下标取到具体的值

                                                                                                                       for(int i=0;i<list.getLength();i++){

                                                                                                                               list.item(i);

                                                                                                                          }

 

  • DocumentBuilderFactory:解析类工厂

    • 这个类也是一个抽象类,不能new

    • newInstance()获取DocumentBuilderFactory的实例

  • sax:

    • SAXParser:解析器类

    • SAXParserFactory:解析器工厂

 

19、使用jaxp实现查询操作

  • java快捷键

    • alt+/   代码提示

    • syso+alt+/

  • 查询xml中所有name元素的值

 

 

 

直接导出方法(小技巧)

 

 

  • 查询xml中第一个name元素的值

 

 

20、使用jaxp添加节点

  • 在第一个p1末尾添加一个操作

 

 

 

21、使用jasp修改节点

修改第一个p1下面的内容是nan

 

 

 

22、使用jasp删除<sex>nan</sex>节点

 

 

 

 

23、遍历节点把所有元素打印出来

 

但是该方法会把空格用#text表示出来

 

24、内容总结

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/85150554