Java Web入门基础(xml之一)

1.表单提交的方式(引入)

            ***通过type=“submit”

            ***通过type="button" onclick=""来实现

           ***通过超链接来实现

           ***onclick:鼠标点击事件

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

               onfocus:得到焦点(兼容)

               onblur:失去焦点

<!doctype html>
<html lang="en">
 <head>
  <title>Document</title>
 </head>
 <body>
     <form id="form1">
	    <input type="text" name="username"/><br/>
		<input type="button" value="提交" onclick="form1();"/>
	 <form>
	 <hr/>
	 <a href="h.html?username=123456">ccccccc</a>
	 <hr/>
	 <input type="text" id="id1" name="text1" value="input" onfocus="focus2();" onblur="blur2();"/>
 </body>
 <script type="text/javascript">
       function form1(){
	       //获取form
		   var form1=document.getElementById("form1");
		   //设置action
		   form1.action="h.html";
		   //提交表单
		   form1.submit();
	   }
	   function focus2(){
	       var input1=document.getElementById("id1");
		   input1.value="";
	   }
	   function blur2(){
	       var input1=document.getElementById("id1");
		   input1.value="input";
	   }
 </script>
</html>

2.xml简介

           *****xml:可扩展标记性语言

                           ****标记性语言:html  标签

                           ****可扩展:

                                      ---html中的标签是固定的,每个有特定的含义

                                      ---xml的标签可以自己定义。可以是中文的标签  <preson></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的编码  utf-8,gbk,iso8859-1(不包含中文)

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

                                      ****xml中文乱码问题的解决

                                                  ****设置保存时候的编码和打开时候的编码一致

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

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

                 (4)注释

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

                 (6)CDATA区(了解)

                  (7)PI指令(了解)

5.xml元素的定义(标签的定义)

                    ***标签定义:

                    *****标签有开始就有结束<person></person>

                    *****标签中没有内容<person/>

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

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

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

                   *****一个xml中只能有一个根标签,其他的标签都在下面来写

                   *****在xml中把空格和换行都当作内容来解析:

                                    --- 下面两行代码是不一样的

                                                     <a>1111111</a>

                                                              <a>

                                                                   11111

                                                                </a>   

                    ****xml中标签的命名规则

                                           (1)区分大小写    <A></A>    <a></a>不同

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

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

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

                                              (5)xml可以是中文

6.xml中的属性的定义

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

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

                          --<person id=""aaaa></person> 

                   ****属性定义的要求

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

                              (2)属性名称不能相同

                              (3)属性和属性值之间用=号属性值用单引号多引号(html类似)

                               (4)属性的命名规范和标签的命名规范一样

7.xml中的注释

                                ***写法:<!-- xml的注释 -->       

                                ***注意:注释不能嵌套  <!--  <!-- -->-->       这种不对

                                ***注释也不能放在第一行,第一行第一列必须是文档声明。   

8.xml中的特殊字符

                              ***如果在xml中想要显示a<b,需要对<进行转义

                               *** <   &lt;

                                      >  &gt;

                                      "    &quot; 

                                       '    &apos;

                                       &    &amp;

9.CDATA区

             *****解决频繁转义if(a<b&&b<c&&d<f){}

             *****利用CDATA区来解决转义

             *****写法

                          <![CDATA[内容]]>  该内容就不需要转义

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

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

10.PI指令(处理指令)        

                 ****可以在xml中设置样式

                 ****写法:<?xml-stylesheet="text/css" href="css文件位置"?>   

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

                  ***xml的语法总结

                                   所有xml元素必须有关闭标签  例如:</person>

                                    xml标签对大小写敏感

                                    xml必须正确的嵌套顺序

                                    xml文档必须只有一个根元素

                                    xml的属性值需要加“”或‘’

                                    xml中特殊字符转义用CDATA

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

11.xml的约束

                              ***为什么需要约束?

                               ***比如定义一个person的xml文件,只想保存人的信息,比如name,gae,但是若果在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约束,需要使用工具(eclipse)

                     ****打开eclipse

                                      ---创建javaproject 

                                      --在src中创建xml和dtd

13.dtd的三种引入方式

                  (1)引入外部的dtd文件

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

                  (2)使用内部的dtd文件

                                      <!DOCTYPE person [
      <!ELEMENT person (age,name)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT gae (#PCDATA)>
]>

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

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

                                       在struts2框架中使用

14.使用dtd定义元素

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

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

                                       <!ELEMENT name (#PCDATA)>

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

                                      ***(#EMPTY):元素为空,没有内容

                                                           <sex></sex>

                                     ***ANY:任意

                    ****复杂元素:

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

                                                          ---子元素只能出现1次

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

                                  --表示子元素出现的次数(符号)

                                                   +:表示一次或则多次

                                                   ?:表示0次或则一次

                                                   *:表示0次或则多次

                    ****子元素之间使用逗号隔开

                                                    ---逗号表示子元素出现的顺序

                   *****子元素之间使用竖线隔开

                                                    ---竖线表示子元素中只能出现任意一个

15.使用dtd定义属性

                     ****语法格式:<!ATTLIST 元素名称

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

                                             >

                  ****属性类型

                                         --CDATA:字符串

      <!ATTLIST birthday 
         ID1 CDATA #REQUIRED
      >

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

                                                        ***(aa|bb|cc)只能出现aa,bb,cc中的任意一个

      <!ATTLIST age
        ID2 (AA|BB|CC) #REQUIRED
      >
                                        --ID:值自能是字母或则下划线开头
      <!ATTLIST name
        ID3 ID #REQUIRED  
      >
      <name ID3="a1">张三</name>

                        ****属性的约束  

                                            --#REQUIRED:属性必须存在

                                            -- #IMPLIED:属性可有可无

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

      <!ATTLIST sex 
         ID4 CDATA #FIXED "ABC"
      >

                                           --直接值

                                                      ****不写属性直接使用直接值

                                                      *****写了属性使用设置的值

v      <!ATTLIST school
        ID5 CDATA "www"
      >
-------------------------整体代码------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
      <!ELEMENT person (name,age,sex,school,birthday)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT sex (#PCDATA)>
      <!ATTLIST sex 
         ID4 CDATA #FIXED "ABC"
      >
      <!ELEMENT school (#PCDATA)>
      <!ATTLIST school
        ID5 CDATA "www"
      >
      <!ELEMENT birthday (#PCDATA)>
      <!ATTLIST birthday 
         ID1 CDATA #REQUIRED
      >
      <!ATTLIST age
        ID2 (AA|BB|CC) #REQUIRED
      >
      <!ATTLIST name
        ID3 ID #REQUIRED  
      >
]>
<person>
   <name ID3="a1">张三</name>
   <age ID2="AA">12</age>
   <sex ID4="ABC">111</sex>
   <school ID5="aaa">111</school>
   <birthday ID1="AAAA">2015</birthday>
</person>

16.实体的定义

                     ****语法  <!ENTITY 实体名称 “实体的值”>

                     *****<!ENTITY TEST "HAHAHHEHE">

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

                     ****注意:

                                ****定义的实体需要写在内部的dtd里面,写在外部的dtd中,在某些浏览器中,值会得不到。

17.xml得解析简介(写到java代码)(************)

                   ***xml是标记型文档

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

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

                                   --document对象,element对象,属性对象,文本对象,node节点对象

                  ***xml解析得方式  :dom和sax

                          ******don解析和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的java.xml.parsers包里面

                                       ---四个类;分别针对dom和sax解析使用的类

                                      ---dom:

                                                  DocumentBuilder:解析器类

                                        ----这个类是个抽象类,可以从DocumentBuilderFactory.newDocumentBuilder()方法获取

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

                                       ---返回的document是一个接口,父接口是Node,在document找不到的方法在node中找

                                       ---在document中getElementsByTagName(String tagname)

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

                                                         -----返回结合NodeList

                                                         ----在NodeList中有两个方法

                                                                      ----getlength()获取集合长度

                                                                       ---item(index)根据index获取元素

                                       ----createElement(String tagName)

                                       ----创建标签

                                      ----   createTextNode(String data)

                                      ---创建文本

                                      ---appendChild()

                                      ----把文本添加到节点

                                     ----getparentNode()

                                     ----获取父节点

                                    ----getTextContent()

                                    ----得到标签里面的内容

                                                  DocumentBuilderFactory:解析器工厂

                                        ----这个类是个抽象类,可以使用DocumentBuilderFactory.newInstance()方法

                                     ---sax:

                                                SAXParser:解析类

                                               SAXParserFactory:解析器工厂

19.使用jaxp来实现查询的操作

                         ***查询xml中name的值

                        ****操作步骤

                                   /*
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml返回document
* 4.得到所有的name元素
* 5.遍历NodeList集合
* */

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <p1>
        <name>zhangsan</name>
        <age>20</age>
    </p1>
    <p1>
        <name>lisi</name>
        <age>30</age>
    </p1>
</person>

package cn.itcast.jaxp;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class TestJaxp {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		//查询所有name元素的值
		/*
		 * 1.创建解析器工厂
		 * 2.根据解析器工厂创建解析器
		 * 3.解析xml返回document
		 * 4.得到所有的name元素
		 * 5.遍历NodeList集合
		 * */
        //创建解析器工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//创建解析器
		DocumentBuilder builder=builderFactory.newDocumentBuilder();
		//解析xml返回document
		Document document=builder.parse("src/person.xml");
		//得到所有的name元素
		NodeList list = document.getElementsByTagName("name");
		//遍历NodeList
		for(int i=0;i<list.getLength();i++) {
			Node name1 = list.item(i);   //得到每个name元素
			//得到name元素里面的值
			String s = name1.getTextContent();  
			System.out.println(s);
		}
	}

}

                         ****查询person.xml中第一个name元素的值

                        ***步骤:

                          /*
* 查询单个name元素的值
* 1.创建解析工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml返回document
* 4.得到所有name元素
* 5.使用集合的下标来获取具体的元素
* 6.得到具体的值使用getTextContent
* **/

public static void selectSin() throws Exception {
		/*
		 * 查询单个name元素的值
		 * 1.创建解析工厂
		 * 2.根据解析器工厂创建解析器
		 * 3.解析xml返回document
		 * 4.得到所有name元素
		 * 5.使用集合的下标来获取具体的元素
		 * 6.得到具体的值使用getTextContent
		 * **/
		//创建解析工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//根据解析器工厂创建解析器
		DocumentBuilder builder=builderFactory.newDocumentBuilder();
		//解析xml返回document
		Document document = builder.parse("src/person.xml");
		//使用集合的下标来获取具体的元素
		NodeList list= document.getElementsByTagName("name");
		Node name1 = list.item(0);
		//得到具体的值使用getTextContent
		String string = name1.getTextContent();
		System.out.println(string);
		
	}

20.使用jaxp添加节点

                        ******在第一个<p1></p1>末尾中添加<sex>nv</sex>

                        *****步骤:

                               /*
* 1.创建解析工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml返回document
* 4.得到第一个p1
*      ---得到所有的p1,提供下标来得到
* 5.创建sex标签  createElement()
* 6.创建文本   createTextNode()
* 7.把文本添加到sex下面  appendChild
* 8.把sex添加到p1下面
* 9.回写xml
* **/

public static void addSex() throws Exception {
		/*
		 * 1.创建解析工厂
		 * 2.根据解析器工厂创建解析器
		 * 3.解析xml返回document
		 * 4.得到第一个p1
		 *      ---得到所有的p1,提供下标来得到
		 * 5.创建sex标签  createElement()
		 * 6.创建文本   createTextNode()
		 * 7.把文本添加到sex下面  appendChild
		 * 8.把sex添加到p1下面
		 * 9.回写xml
		 * **/
		//创建解析工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//根据解析器工厂创建解析器
		DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();
		//解析xml返回document
		Document document = documentBuilder.parse("src/person.xml");
		//得到第一个p1
		NodeList list = document.getElementsByTagName("p1");
		Node p1 = list.item(0);
        //创建sex标签  createElement()
		Element sex1 = document.createElement("sex");
		//创建文本
		Text text1 = document.createTextNode("nv");
		//把文本添加到sex下面  appendChild
		sex1.appendChild(text1);
		//把sex添加到p1下面
		p1.appendChild(sex1);
		//回写xml
		TransformerFactory transformerFactory=TransformerFactory.newInstance();
		Transformer transformer=transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
		
	}

21.使用jaxp修改节点

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

         ***步骤:

  /*               1.创建解析工厂
* 2.根据解析工厂创建解析器
* 3.解析xml,返回document
* 4.得到sex item
* 5.修该sex里面的值setTextComtent
* 6.回写xml
* **/

public static void modifySex() throws Exception {
		/* 1.创建解析工厂
		 * 2.根据解析工厂创建解析器
		 * 3.解析xml,返回document
		 * 4.得到sex item
		 * 5.修该sex里面的值setTextComtent
		 * 6.回写xml
		 * **/
		//创建解析工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//根据解析工厂创建解析器
		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
		//解析xml,返回document
		Document document = documentBuilder.parse("src/person.xml");
		//得到sex item
		Node sex = document.getElementsByTagName("sex").item(0);
		//修该sex里面的值setTextComtent
		sex.setTextContent("nan");
		//回写xml
		TransformerFactory transformerFactory=TransformerFactory.newInstance();
		Transformer transformer=transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
	}

22.使用jaxp删除节点

            ****删除person.xml中的sex节点

           ***步骤:

                      /*
* 1.创建解析工厂
* 2.根据解析工厂创建解析器
* 3.解析xml,返回document
* 4.获取sex标签
* 5.获取sex的父节点
* 6.根据父节点删除sex节点  removeChild()
* 7.回写xml

* **/

public static void delsex() throws Exception{
		/*
		 * 1.创建解析工厂
		 * 2.根据解析工厂创建解析器
		 * 3.解析xml,返回document
		 * 4.获取sex标签
		 * 5.获取sex的父节点
		 * 6.根据父节点删除sex节点  removeChild()
		 * 7.回写xml
		 * **/
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
		Document document = documentBuilder.parse("src/person.xml");
		//获取sex标签
		Node sex = document.getElementsByTagName("sex").item(0);
		//获取sex的父节点
		Node p1 = sex.getParentNode();
		//根据父节点删除sex节点  removeChild()
		p1.removeChild(sex);
		//回写xml
		TransformerFactory transformerFactory=TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
	}

23.使用jaxp来遍历节点

           *****把person.xmlz中的所有元素名称打印出来

          ****步骤:

/*    1.创建解析工厂
* 2.根据解析工厂创建解析器
* 3.解析xml,返回document
*****使用递归来实现
* 4.得到根节点
* 5.得到根节点的子节点
* 6.得到根节点子节点的子节点
* **/

public static void listElement() throws Exception{
	/*	   1.创建解析工厂
		 * 2.根据解析工厂创建解析器
		 * 3.解析xml,返回document
		 *****使用递归来实现
		 * 4.得到根节点
		 * 5.得到根节点的子节点
		 * 6.得到根节点子节点的子节点
	 * **/
	DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
	DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
	Document document = documentBuilder.parse("src/person.xml");
	//编写个方法实现遍历的操作
	list1(document);
	
}
private static void list1(Node node) {
	if(node.getNodeType()==Node.ELEMENT_NODE)   //判断节点是标签,而不是文本和空格
	System.out.println(node.getNodeName());
	//得到一层子节点
	NodeList list = node.getChildNodes();
	for(int i=0;i<list.getLength();i++) {
		//得到每一个节点
		Node node1 = list.item(i);
		//继续得到node1的子节点(递归)
		list1(node1);
		
	}
	
}



  


                                          

         


                   

          

                                       

                                                                        

                                                                      

                                                                                 

                                



猜你喜欢

转载自blog.csdn.net/silence_hv/article/details/80454488