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,不能正常显示,因为把<当做标签
*如果就想要显示,需要对特殊字符进行转义
** &  &amp;
** < &lt;
** > *gt;
** " &quot;
** ' &apos;

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);
}
}

Javaweb学习笔记——(五)——————DOM&XML目录的更多相关文章

  1. JavaWeb学习笔记五 会话技术Cookie&Session

    什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...

  2. Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)

    一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...

  3. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  4. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  5. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  6. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  8. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  9. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  10. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

随机推荐

  1. python之attrgetter函数对对象排序

    # 使用attrgetter函数对对象排序 # attrgetter处理对象,itemgetter处理序列 from operator import attrgetter class user(): ...

  2. 类的三大方法 与__init___

    静态方法  存储在类中 实例方法 与类方法都能调用 不需要 传递self 相当于在类里面写了一个函数 类方法 存储在类中 只能是类调用 普通方法  存储在类中  由实例对象使用 在实例化类的时候 就相 ...

  3. pgm11

    这里简要的讨论 hybrid network 与一些时序数据的分析. hybrid network 指网络中存在离散随机变量与连续随机变量,这种情况下一般非常麻烦,这主要是因为连续型随机变量需要使用某 ...

  4. Hadoop 入门

    我看过的比较全的文章.赞一下 原文链接:http://www.aboutyun.com/thread-8329-1-1.html 问题导读: 1.hadoop编程需要哪些基础?2.hadoop编程需要 ...

  5. MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容

    MySQL将一张表的某些列数据,复制到另外一张表 INSERT INTO t_topic_content(content,topicId) SELECT content,id FROM t_topi ...

  6. 稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。

    稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记. 还有 google 在 udacity 上的 CNN 教程. CNN(Convolutional Neural Networks) 卷积神经网络简单 ...

  7. BZOJ 3164: [Heoi2013]Eden的博弈问题

    3164: [Heoi2013]Eden的博弈问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 134  Solved: 98[Submit][St ...

  8. 【转】ls 命令的 20 个实用范例

    Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道. ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上 ...

  9. idea svn performing vcs refresh 很长时间

    go to settings - version control - background set changelists to cache initially to minimal value (1 ...

  10. 谨记:new Date()在IOS中的坑

    第一次遇到,记录一下 要创建一个指定时间的new Date对象时,通常的做法是: new Date("2018-04-27 11:11");然后就可以根据这个获取年月日等信息 这种 ...