JavaWeb学习笔记——xml、dtd

案例:动态生成表格

<html>
 <head>
	<title></title>
	<style type="text/css"></style>
 </head>
	<body>
	行<input type="text" id="h"/>
	列<input type="text" id="l"/>

	<input type="button" value="生成" onclick="add2();"/>

	<div id="divv"></div>
	</body>
	<script>

	function add2(){
		var h = document.getElementById("h").value;
		var l = document.getElementById("l").value;

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

		var tab="<table>";
		for(var i=0;i<h;i++){
		tab +="<tr>";
	
		for(var j=0;j<l;j++){
			tab+="<td>AAAAAA</td>";
				//alert(tab);
		}
        tab +="</tr>";
	}
	tab+="</table>";
	//alert(tab);

	divv.innerHTML=tab;
	}
	</script>
</html>

XML

表单提交方式

button  action=页面     submit()

onclick

onchange 改变内容 select

onfocus  得到焦点

onblur  逝去焦点

XML可扩展标记型语言

-使用标签来操作

-标签可以自己定义

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

不同系统之间传输数据

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

作为配置文件

文档声明

<?xml version="1.0" encoding="gbk"?>

必须第一行第一列

乱码问题解决:保存到本地硬盘,使用的gbk编码保存。浏览器打开xml文件,用设置的格式打开,码表对应值不一致所以导致乱码。(保存时的编码和打开时的编码一致,就不会出现乱码)

定义元素

有开始必须要结束<a></a>

没有内容可以在标签内结束<a/>

只能有一个根标签,其他标签都是这个标签的子标签或者孙标签

会把空格换行都当成内容解析

xml区分大小写(html不区分大小写)

不能以数字和下划线开头

标签不能以xml开头

标签不能包含空格和冒号:

可以是中文

定义属性

可以有多个属性

属性名不能相同

注释

<!-- 这是注释-->  注释显示成灰色

注释里面不能嵌套

特殊字符

转义

<   &lt;  (必须有分号)

>   &gt;

CDATA区

<![CDATA[内容]]>

PI指令

设置样式

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

对中文标签不起作用

 

XML的约束

!!!(面试题)dtd约束  schema约束

dtd快速入门

创建dtd文件 后缀为.dtd

有几个元素写几个<!ELEMENT>

判断元素是简单元素还是复杂元素

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

           -简单元素没有子元素 <!ELEMENT 元素名称 (#PCDATA)>                 (一定是英文环境的括号)

需要在xml文件中引用dtd文件<!DOCTYPE 根元素名臣 SYSTEM "dtd文件的路径">

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

dtd引入方式

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

使用内部的dtd文件

使用外部的dtd文件  <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD的URL">   (Struts框架)

使用dtd定义元素

简单元素

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

               - EMPTY 元素为空(没有内容)

               - ANY

复杂元素

            -子元素只能出现一次

            -   + 表示一次或者多次

                ?表示零次或者一次

                *任意次

            -  逗号进行隔开表示元素出现的顺序

            -  元素使用|隔开表示元素只能出现其中的任意一个

dtd定义属性

<!ATTLIST 元素名称

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

>

#REQUIRED     表示必须要出现

属性的类型

      CDATA 字符串

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

      ID

属性的约束

      -        #REQUIRED  必须有

      -        #IMPLIED   可有可无

      -       #FIXED  表示一个固定的值,后面接你设定的固定值

     -       直接值  你设定的默认值

dtd实体

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

使用实体   &实体名称;

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE SYSTEM "TV.dtd">
<TVSCHEDULE NAME="CCAV">
	<CHANNEL CHAN="DJR">
		<BANNER>tc</BANNER>
		<DAY>
			<DATE>2018</DATE>
			<HOLIDAY>2018-8-13</HOLIDAY>
		</DAY>
		<DAY>
		<DATE>2019</DATE>
		<PROGRAMSLOT VTR="999">
			<TIME>8-13</TIME>
			<TITLE RATING="888" LANGUAGE="777">tacenee</TITLE>
		</PROGRAMSLOT>
		</DAY>
	
	</CHANNEL>

</TVSCHEDULE>
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

**xml解析(写到java代码)

使用dom和sax解析过程 (解析技术,不是解析器)

js解析html文件 树形结构 标签,元素,文本封装成对象

dom (如果文件过大,造内存溢出。优点:方便实现增删改操作)

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

            (使用sax方式不会造成内存溢出,实现查询。  缺点:不能实现增删改操作)

解析器

jaxp

dom4j(*****实际使用***)

jdom

jaxp api

jaxp是javase的一部分

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

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

              -dom

                            DocumentBuilder  解析器类

                             抽象类,不能new   可以从DocumentBuilderFactory.newDocumentBuilder()方法获取

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

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

                                       

                                        nodeList   getlength长度 item下标具体值

                            DocumentBuilderFactory解析器工厂

                           抽象类,不能new  newInstance() 获取DocumentBuilderFactory的实例

第一个元素

public static void selectSin() throws Exception{
			
			DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder= builderFactory.newDocumentBuilder();
			
			Document document = builder.parse("src/person.xml");
			
			NodeList list = document.getElementsByTagName("name");
			Node name1 = list.item(0);
			String s = name1.getTextContent();
			System.out.println(s);
					
		}

全部元素

private static void selectAll() throws Exception {
			DocumentBuilderFactory builderFoctory = DocumentBuilderFactory.newInstance();
			
			DocumentBuilder builder = builderFoctory.newDocumentBuilder();
			
			Document document= builder.parse("src/person.xml");
			NodeList list=document.getElementsByTagName("name");
			for(int i =0;i<list.getLength();i++){
				Node node = list.item(i);
				String s =node.getTextContent();
				System.out.println(s);
			}
		}

使用jaxp添加元素

public static void add1() throws Exception{
			DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = builderFactory.newDocumentBuilder();
			Document document =builder.parse("src/person.xml");
			
			NodeList list = document.getElementsByTagName("p1");
			Node node1 = list.item(0); 
			Element name1 = document.createElement("sex");
			Text text1 = document.createTextNode("man");
			name1.appendChild(text1);
			node1.appendChild(name1);
			
			//回写操作,加入便签只是在内存中操作,还要写进文件
			TransformerFactory factory = TransformerFactory.newInstance();
			Transformer trans = factory.newTransformer();
			trans.transform(new DOMSource(document),new StreamResult("src/person.xml"));
			
		}

修改性别

private static void setSex() throws Exception {
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			
			Document document = documentBuilder.parse("src/person.xml");
			
			Node sex1 = document.getElementsByTagName("sex").item(0);
			
			sex1.setTextContent("women");
			
			TransformerFactory transformerFactory =TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			
			transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
		}

删除节点

private static void delectNode() throws Exception {
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			
			Document document=documentBuilder.parse("src/person.xml");
			
			Node sex1 = document.getElementsByTagName("sex").item(0);
			
			Node p1 = sex1.getParentNode();
			p1.removeChild(sex1);
			
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
		}

遍历节点

private static void showElement() throws Exception {
			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){
				String s =node.getNodeName();
				System.out.println(s);
			}
			
			NodeList list = node.getChildNodes();
			for(int i =0;i<list.getLength();i++){
				Node node1 = list.item(i);
				list1(node1);
			}
			
		}

猜你喜欢

转载自blog.csdn.net/TangXiaoPang/article/details/86654109