Javaweb学习笔记——(五)——————DOM&XML目录
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);
}
}
Javaweb学习笔记——(五)——————DOM&XML目录的更多相关文章
- JavaWeb学习笔记五 会话技术Cookie&Session
什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...
- Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)
一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍
python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
随机推荐
- Angular $cookieStore简单应用
angular.module('cookieStoreExample', ['ngCookies']) .controller('ExampleController', ['$cookieStore' ...
- DOM中表格的操作方法总结
DOM中表格的操作方法总结 <table/>元素的方法如下: caption:指向<caption/>元素(如果存在): tBodies:<tbody/>元素的集合 ...
- Maven Archetype简介以及搭建
为什么会写这篇文章,因为公司先在构建项目骨架都是用的 maven archetype ,身为一个上进的渣渣猿,自己还是有必要了解下这个东西的. Archetype介绍 Archetype 是一个 Ma ...
- 使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决
几个关键字: WebAPI, Android, Apache HttpComponent/HttpClient 问题:无论怎么测试, WebAPI的FormBody value总是空. 最简单的代码 ...
- RSA,JAVA私钥加密,C#公钥解密
做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我 ...
- 我的IntelliJ IDEA快捷键
Ctrl + Alt + S 打开设置菜单 Ctrl + N 快速打开类,写类的全路径可以查看jar包中的类 Ctrl + Shift + N 快速打开文件 Ctrl + X ...
- Json Self referencing loop detected
Self referencing loop detected......的错误 解决方案: 1 增加 [JsonIgnore] 过滤关联,使其不参与序列化. 这个方法简单粗暴.但是你就没办法获取关 ...
- MT【24】一道五次方程的求根题
解答: 评:一般的五次及以上的多项式方程是无根式解的,只能用计算机去精确到某某位.但是特殊的比如$x^5=1$显然有根式解,本题就是一个不平凡的特殊的例子,这里的代换用于求解三次方程的求根过程是一样的 ...
- wordpress 页面显示指定分类文章
首页显示指定分类备份主题文件夹中的 index.php 文件,修改index.php找到如下一行代码:<?php if (have_posts()) : ?>在上面这行代码的前面加上:&l ...
- 架构师成长之路2.2-PXE+Kickstart安装部署
点击返回架构师成长之路 架构师成长之路2.2-PXE+Kickstart安装部署 系统测试环境: 实验环境:VMware Workstation 12 系统平台:CentOS Linux releas ...