版权声明:斌哥版权,如有雷同,纯属虚构 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末尾添加一个操作
-