1.表单提交方式

*使用submit提交

<form>

<input type="submit" />

</form>



*使用button提交表单

-代码

function form1(){

//获取form

var form1 = document.getElementById("form1");



form1.action = "hello.html";



form1.submit();

}

*使用超链接提交

-代码

<a href="hello.html?username123456">使用超链接提交</a>



*onclick:鼠标点击事件

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



onfocus:得到鼠标焦点(ie5,某些版本的ie6会出现兼容性问题)

onblur:失去焦点



2.xml的简介

*eXtensible Markup Language:可扩展标记型语言

**标记型语言:html是标记型语言

也是使用标签来操作

**可扩展:

-html里面的标签是固定,每个标签都有特定的含义 <hr/> <a></a>

-标签里面可以自己定义,可以写中文的标签<person></person> <></>



*xml用途

**html是用于显示数据,xml也可以显示数据(但不是主要功能)

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



*xml是w3c组织发布的技术



*xml有两个版本 1.0 1.1

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



3.xml的应用

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

**聊天系统数据的传输

**画图分析工程

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



*经常用在配置文件

*比如现在链接数据库 肯定知道数据库的用户名和密码、数据名称

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



4.xml的语法

(1)xml的文档声明(*****)

*创建一个文件 后缀名为 *.html

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

**文档声明:<?xml version="1.0" encoding="UTF-8"?>

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



*属性

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

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

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

*注意:xml的中文乱码问题解决

**画图分析乱码问题

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





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

(3)定义属性(*****)

(4)注释(*****)

(5)特殊字符(*****)

(6)CDATA区(了解)

(7)PI指令(了解)



5.xml的元素的定义

**标签定义



**标签有定义又开始必须要有结束:<person></person>



**标签没有内容,可以再标签内结束:<aa/>



**标签可以嵌套,但是必须合理嵌套

***合理嵌套:<aa><bb></bb></aa>

***不合理嵌套:<aa><bb></aa></bb>



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



**在xml中,会把空格和换行都当成内容来解析。

下面这两段代码含义是不一样的

**<aa>123</aa>

**<aa>

123

</aa>



**xml标签名称可以是中文



**xml中标签的名称规则

(1)xml代码区分大小写

<p></P>:这两个标签是不一样的

(2)xml的标签不能以数字和下划线开头

<aaa> <_aaa>:这丫是错误的

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

<xmla> <Xmla> 这些都是错误的标签命名

(4)xml的表签不能包含空格和冒号

<a v> <a:c> 错误



6.xml中属性的定义

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

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



*<person id1="aa"></person>



**属性定义的要求

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

<person id1="a" id2="bbb"></person>

(2)属性名称不能相同

<person id1="a" id1="bbb"></person> (错误)

(3)属性名称和属性值之间使用=,属性值使用引号包起来(可以是单引号,也可以是双引号)

(4)xml属性的名称规范和元素的名称规范一致



7.xml中的注释

*写法<!--注释的内容-->

**注意的地方

***注释不能嵌套

<!--aa <!-- aa -->-->

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



8.xml中的特殊字符

*如果想要在xml中现在
a<b,不能正常显示,因为把<当做标签

*如果就想要显示,需要对特殊字符进行转义

**
& &

**
<
<

**
>
*gt;

**
"
"

**
'
'



9.CDATA区

*可以解决多个字符都需要转义的操作 if(a<b && b<c){}

*把这些内容放在CDATA区里面,不需要转义了

**写法:

<![CDATA[内容 ]]>

-代码

<![CDATA[ <b>if(a<b && b<c){}</b> ]]>

**把特殊字符当做文本内容,而不是标签



10.PI指令(处理指令)

*可以在xml中设置样式

*写法:<?xml-stylesheet type="text/css" href="one.css" ?>



*设置样式,只能对英文标签名称起作用,对于中文的标签名称不起作用的。



**xml的语法的总结

所有的XML元素都必须有关闭标签

XML标签对大小写敏感

XML必须正确的嵌套顺序

XML文档必须有根元素(只有一个)

XML的属性值必须加引号

特殊字符必须转义 --- CDATA

XML中的空格、回车换行会解析时被保留



11.xml的约束

*为什么需要约束?

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



*xml的约束的技术:dtd约束 和schema约束(理解)



12.dta的快速入门

*创建一个文件 后缀名为 .dtd



步骤:


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

(2)判断元素是简单元素还是复杂元素

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

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

-简单元素:没有子元素

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

(3)需要在xml文件中引入dtd文件

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



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



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



**打开myeclipse开发工具

***创建一个项目day05

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

***在xml中引入dtd文件之后,比如只能出现name,age,多写了一个a,会提示出错



13.dtd的三种引入方式

(1)引入外部的dtd文件

<!DOCTYPE person SYSTEM "1.dtd">



(2)使用内部的dtd文件

<!DOCTYPE person[

<!ELEMENT person (name,age)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

]>

(3)使用外部的dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">

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

-<!DOCTYPE Struts PUBLIC "....." "......">



14.使用dtd定义元素

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



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

<!ELEMENT name (#PCDATA)>

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

***EMPTY:元素为空

-
<sex></sex>

***ANY:任意

*复杂元素

<!ELEMENT person (name,age,sex,school)>

-子元素只能出现一次

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



*表示子元素出现的次数

+;表示一次或多次出现

?:表示零次或者一次

*:表示零次或者多次



*子元素直接使用逗号进行隔开 ,

**表示元素出现的顺序

*子元素直接使用‘|’隔开

**表示元素只能出现其中的任意一个



15.使用dtd定义属性

*语法 <!ATTLIST 元素名称

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

*属性类型

-CDATA:字符串

- <!ATTLIST birthday

ID CDATA #REQUIRED

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

** 红绿灯效果

**(aa|bb|cc)

- <!ATTLIST age

ID2 (AA|BB|CC) #REQUIRED

>

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

-<!AITLIST name

ID3 ID #REQUIRED

>



*属性的约束

-#REQUIRED:表示该属性必须存在



-#IMPLIED:属性可有可无



-#FIXED:表示一个固定值 #FIXED "AAA"

-属性值必是设定的这个的固定值

-<!ATTLIST sex

ID4 CDATA #FIXED "ABC"

>

-直接值

*不写属性,使用直接值

*如果写了属性,使用设置的那个值

<!ELEMENT school ANY>

<!ATTLIST school

ID5 CDATA "WW"

>





16.实体的定义

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

***<!ENTITY TEST "HELOO">

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



**注意:

*定义的实体需要写在内部的dtd里面,如果写在外部的dtd里面,在某些浏览器下,内容得不到





17.xml的解析的简介(写到java代码)(****今天最重要的内容****)

*xml是一个标记型文档



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

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

-document对象、element对象、属性对象、文本对象、Node节点对象



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

**使用dom和sax来解析xml的执行过程

***dom解析和sax解析xml区别:



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

****使用dom方式解析缺点:如果文件过大,造成内存溢出

****使用dom方式的优点:很方便实现增删改操作



***sax:采用事件驱动,边读边解析。从上到下,一行一行的解析,解析到某一个对象,把对象名称返回

****使用sax方式优点:不会造成内存溢出,实现查询

****使用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

此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder()方法获取



-一个方法,可以解析xml parse("xml路径") 返回的是 Document 整个文档

-返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,就到Node中去找



-在document里面的方法

getElementByTagName(String tagName)

--这个方法可以得到标签

--返回集合NodeList



createElement(String tagName)

--创建标签



createTextNode(String data)

--创建文本



appendChaild(Node newChild)

--把文本添加到标签下面



removeChild(Node oldChild)

--通过父节点删除节点



getParentNode()

--获取父节点



NodeList list

-getLength() 得到集合的长度

-item(int index) 下标取到具体的值

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

list.item(i)

}



getTextContent()

-得到标签里面的内容



***sax:

SAXParser:解析器类

SAXParserFactory:解析器工厂









19.使用jaxp实现查询操作

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

步骤:

/*

* 1.创建解析器工厂


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

* 2.根据解析器工厂创建解析器


DocumentBuilder db = dbf.newDocumentBuilder();

* 3.解析xml返回document


Document document = db.parse("src/person.xml");

* 4.得到所有的name元素

NodeList list = document.getElementsByTagName("name");

* 5.返回集合,遍历集合,得到每一个name元素


-遍历 getLength() item()


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

Node name1 = list.item(i);//得到每一个name元素

//得到name元素里面的值

String str = name1.getTextContent();

System.out.println(str);

}


*

*/



***查询xml中第一个name的值

*步骤


/**

* 1.创建解析器工厂

* 2.根据解析器工厂创建解析器

* 3.解析xml返回document

* 4.得到第一个name元素

* 5.得到第一个name元素的值


NodeList.item(下标):集合下标从0开始


6.得到具体的值,使用getTextContent方法

*/



20.使用jaxp添加节点

***在第一个p1下面(末尾)添加<sex></sex>

***步骤:

/**

*

* 1.创建解析器工厂

* 2.根据解析器工厂创建解析器

* 3.解析xml返回document

* 4.得到第一个name元素

* 5.创建sex标签createElement

* 6.创建文本createTextNode

* 7.把文本添加到sex下面appendChild()

* 8.把sex添加到第一个p1下面

*

* 9.回写xml

*/



21.使用jasp修改节点

***修改第一个p1下面的sex内容是男

**步骤

/*

* 1.创建解析器工厂

* 2.根据解析器工厂创建解析器

* 3.解析xml返回document

*

* 4.得到第一个sex元素 item方法

*

* 5.修改sex中的文本 setTextContent方法

*

* 6.回写xml

*

*/



22.使用jaxp删除节点

***删除
<sex></sex>

**步骤

/*

* 1.创建解析器工厂

* 2.根据解析器工厂创建解析器

* 3.解析xml返回document

* 4.获得sex的节点

* 4.得到sex的父节点p1

* 5.删除p1中的sex标签

*

* 6.回写xml

*/



23.使用jaxo遍历节点

**把所有的元素标签名称打印出来

/*

* 1、创建解析器工厂

* 2、根据解析器工厂创建解析器

* 3、解析xml,返回document

*

*

* ===递归实现

* 4.得到根节点(打印node.getNodeName())

* 5.得到根节点子节点

* 6.得到根节点子节点的子节点

*/




//递归遍历的方法

private static void list1(Node node) {

//判断是元素的时候才打印

if (node.getNodeType() == node.ELEMENT_NODE) {

System.out.println(node.getNodeName());

}

NodeList list = node.getChildNodes();

//遍历list

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

//得到每一个节点

Node node1 = list.item(i);

list1(node1);

}

}