JavaWeb (day5)

2019-04-12  本文已影响0人  定格r

1.表单提交方式

<form>
        ........
         <input type="submit"/>
</form>
<body>
   <form id="form1">
       <input type="text" name="username"/>
       <br>
       <input type="button" value="提交" onclick="form1();"/>
   </form> 

<script type="text/javascript">
function form1(){
     var form1=document.getElementById("form1");
     form1.action="hello.html";
     form1.submit();
}
</script>
</body>
<a href="hello.html?username=123456">使用超链接提交</a>

onclick :鼠标点击事件
onchange:改变内容(一般和select一起使用)
onfocus:得到焦点( ie5、某些版本的ie6)
onblur:失去焦点

2.xml 简介

1.extensible Markup Language:可拓展标记型语言

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

—— 标签可以自己定义,可以写中文的标签 <person></person>、<猫></猫>
2.xml 用途

3.xml 是 w3c 组织发布的技术

4.xml 有两个版本 1.0 1.1

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

2.xml 应用

3.xml 的语法

(1)xml 的文档声明

   <?xml version="1.0"  encoding="utf-8"?>

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

(2) 定义元素(标签)

<bb>11111</bb>
<bb>
     11111
</bb>

1> 区分大小写
2> 不能以数字,下划线开头
3> 不能以 xml XML Xml 开头
<xmla>,<XMLb> 这些都不正确
4> 不能包含空格和冒号

(3)定义属性

<persion id1='aaa' id2='bbb'> </persion>
<persion id1='aaa' id1='bbb'> </persion>

这个是错误的,不能有两个 id1

<!--   -->

注意:
注释不能嵌套
注释不能放在第一行,第一行必须放文档声明
(5)特殊字符

特殊字符 替代符号
& &amp
< &lt
> &gt
" &quot
' &apos

(6)CDATA

(7)PI 指令 (处理指令)

<?xml-stylesheet  type="text/css" href="css的路径"?>

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

4、xml 约束

xml 的约束技术:dtd 约束和 schema 约束

(1)dtd 快速入门

(1)看 xml 中有多少个元素,有几个元素就在 dtd 里面写几个 <!ELEMENT>
(2)判断元素是简单元素还是复杂元素

(3)需要在 xml 文件中引入 dtd 文件
<!DOCTAPE 根元素名称 SYSTEM “dtd 文件的路径”>

1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "1.dit">
<person>
<name>zhangsan</name>
<age>20</age>
</person>

1.dtd:

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
(2)dtd 的三种引入 方式

(1)引入外部的 dtd 文件

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

(2) 使用 内部的 dtd 文件

<!DOCTYPE 根元素名称 [
<! ELEMENT person (name,age)>
<! ELEMENT name (#PCDATA)>
<! ELEMENT name (#PCDATA)>
]>

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

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

(3)使用 dtd 定义元素

1.语法:<!ELEMENT 元素名 约束>
2.简单元素:没有子元素的元素

<!ELEMENT name (#PCDATA)>

  • (#PCDATA) :约束 name 是字符串类型
  • EMPTY:元素为空(没有内容)
    <sex></sex>
  • ANY :任意

3.复杂元素

<! ELEMENT person (name+,age*,sex,school)

——子元素只能出现一次

" + " 表示一次或者多次
" ?"表示零次或者一次
" * "表示零次或者多次

(3) 使用 dtd 定义属性
<!ATTLIST birthday
   属性名称 属性类型 属性的约束
>

1> CDATA : 字符串

<!ATTLIST birthday
 ID1 CDATA #REQUIRED
>

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

<!ATTLIST age
 ID2  (AA|BB|CC)  #REQUIRED
>
<!ATTLIST sex
    ID4 CDATA  #FIXED “ABC”
>

4> 直接值
不写属性 ,使用直接值
写了属性,使用设置那个值

<!ATTLIST school
   ID5  CDATA  "WWW"
>
(4) 实体的定义

定义实体需要写在内部 dtd 里面

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

(5)xml 的解析的简介

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

dom 方式解析

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

sax方式解析

采用事件驱动,边读边解析
——从上到下,一行一行的解析,解析到某一对象,返回对象名称
缺点:不能实现增删改操作
优点:如果文件过大,不会造成内存溢出,方便实现查询操作

5.jaxp 的 api 的查看

jaxp 是 javase 的一部分

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

1.这个类是一个抽象类,不能 new
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取

2.一个方法,可以解析 xml parse(“xml 路径”)返回是 Document 整个文档

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

4.在 document里面方法

——这个方法可以得到标签
返回集合 NodeList

——创建标签

——获取父节点

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

DocumentBuilderFactory:解析器工厂
——这个类也是一个抽象类,不能 new
newInstance () 获取 DocumentBuildertory 的实例。

6.使用 jaxp 实现查询操作

DocumentBuildertory .newInstance ();

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

BuilderFactory.newDocumentBuilder();

3.解析 xml 返回 document

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

4.得到所有的 name 元素

document.getElementsTagName("name");

5.返回集合,遍历集合,得到每一个 name 元素
遍历 getLength() item()
得到元素里面值使用 getTextContent

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到所有的 name 元素
5.使用返回集合,里面方法 item,下标获取具体的元素
NodeList.item(下标):集合下标从零开始
6.得到具体的值,使用 getTextContent 方法

7.使用 jaxp 添加节点

在第一个 p1 下面(末尾) 添加<sex>nv</sex>
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到第一个 p1
——得到所有 p1 ,使用 item 方法下标得到
5.创建 sex 标签 createTextNode
6.创建文本 createTextNode
7.把文本添加到 sex 下面 appendChild
8.把 sex 添加到第一个 p1 下面 appendChild
9.回写 xml

8.使用 jaxp 修改节点

修改 第一个 p1 下面的sex内容是nan
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到 sex item 方法
5.修改sex里面的值 ——setTextContent方法
6.回写 xml

//回写 xml
TransformerFactory transformerFactory=TransformerFactory .newInstance();
Tranaformer transformer=transformerFactory.new Transformer();
transformer .transform(new DOMSource(document),new StreamResult("src/person.xml");

9.使用 jaxp 删除节点

删除 <sex>nan</sex>节点
步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document

  1. 获取 sex 元素
    5.获取 sex 的父节点 使用 getParentNode 方法
    6.删除使用父节点 removechild 方法
    7.回写 xml

9.使用 jaxp 遍历节点

步骤:

1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析 xml ,返回 document
4.得到根节点
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);
//node1.getChildNodes()
list1(node1);
}
上一篇下一篇

猜你喜欢

热点阅读