标签:
文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
---|---|---|---|---|---|---|
V1.0 | 2016.04.14 | lutianfei | none |
<form onsubmit="">
onsubmit="return run()"
<script type="text/javascript">
// 给姓名提示
function run1(){
var uspan = document.getElementById("uspan");
uspan.innerHTML = "不能输入特殊字符";
}
// 表单校验,必须有返回值
function run(){
// 校验姓名
var name = document.getElementById("nameId").value;
if(name == "" || name.length == 0){
var uspan = document.getElementById("uspan");
uspan.innerHTML = "用户名不能为空";
return false;
}
// 校验密码
var pwd = document.getElementById("pwdId").value;
if(pwd == "" || pwd.length < 6){
var pspan = document.getElementById("pspan");
pspan.innerHTML = "密码至少6位";
return false;
}
// 确认密码
var repwd = document.getElementById("repwdId").value;
if(pwd != repwd){
var rpspan = document.getElementById("rpspan");
rpspan.innerHTML = "两次密码不一致";
return false;
}
// 确认密码
// /^表达式$/.test(string) 返回true获取false
var email = document.getElementById("emailId").value;
if(!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email)){
var espan = document.getElementById("espan");
espan.innerHTML = "邮箱格式不正确";
return false;
}
}
// 使用js提交表单
function run2(){
// 通过id获取form
// var form = document.getElementById("formId");
// 通过form的name的属性获取表单
var form = document.form1;
//var name = document.form1.username.value;
//alert(name);
// 设置提交的路径
form.action = "success.html";
form.method = "get";
// 提交表单
form.submit();
}
</script>
</head>
<body>
<form id="formId" name="form1" onsubmit="return run()">
<table border="1" width="60%">
<tr>
<td>输入姓名</td>
<td>
<input type="text" name="username" id="nameId" onfocus="run1()"/><span id="uspan"></span>
</td>
</tr>
<tr>
<td>输入密码</td>
<td>
<input type="password" name="password" id="pwdId" /><span id="pspan"></span>
</td>
</tr>
<tr>
<td>确认密码</td>
<td>
<input type="password" name="repassword" id="repwdId" /><span id="rpspan"></span>
</td>
</tr>
<tr>
<td>
输入邮箱
</td>
<td>
<input type="text" name="email" id="emailId" /><span id="espan"></span>
</td>
</tr>
<tr>
<td colspan="2">
<!-- <input type="submit" value="注册"> -->
<input type="button" value="注册" onclick="run2()">
</td>
</tr>
</table>
</form>
</body>
// 通过id获取form
// var form = document.getElementById("formId");
// 通过form的name的属性获取表单
var form = document.form1;
//var name = document.form1.username.value;
//alert(name);
// 设置提交的路径
form.action = "success.html";
form.method = "get";
// 提交表单
form.submit();
XML
是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。W3C组织
(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0
规范。XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
XML传输数据,HTML是显示数据。
Parser(解析器)
。<?xml version="1.0" encoding="UTF-8"?>
<中国>
<北京>
<海淀></海淀>
<丰台></丰台>
</北京>
<山东>
<济南></济南>
<青岛></青岛>
</山东>
<湖北>
<武汉></武汉>
<荆州></荆州>
</湖北>
</中国>
在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。
数据交换:不同语言之间用来交换数据
应用
<?xml version="1.0" ?>
属性:
乱码问题
XML元素
指XML文件中出现的标签。一个标签分为起始
和结束标签
(不能省略)。一个标签有如下几种书写形式: <mytag>some content</mytag>
<mytag1><mytag2></mytag1></mytag2>
:错误一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
命名规范:
<a> </A>
代表两个标签数字
和-
开头 错误的:<1a> <-a>
XML
(Xml XML xml)开头 错误的:<xmlaa>
空格
和冒号
。由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。例如:下面两段内容的意义是不一样的。
可以使用双引号或者单引号。
一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name=“value” …/>
<mytag>
<name>
<firstName/>
<lastName/>
</name>
</mytag>
<!-- XML的注释 -->
<
: <
;>
: >
;&
: &
;"
: "
;‘
: &apos
;
<
和 &
的符号要用转义字符
>
“
‘
可以不使用转义字符
CDATA
是Character Data的缩写语法:<![CDATA[内容]]>
把标签中的内容作为字符串。
<![CDATA[
<itcast>www.itcast.cn</itcast>
]]>
约束
。<!DOCTYPE 根节点 [ DTD的代码 ]>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
// xml代码:
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
...
</书架>
<!DOCTYPE 根节点 SYSTEM “DTD的地址” >
<!DOCTYPE 根节点 PUBLIC “DTD的名称” “DTD的地址” >
在DTD文档中使用ELEMENT
关键字来声明一个XML元素。
语法:<!ELEMENT 元素名称 元素类型>
(#PCDATA)
指示元素的主体内容只能是普通的文本.(Parsed Character Data)EMPTY
用于指示元素的主体为空。比如<br/>
ANY
用于指示元素的主体内容为任意类型。(子元素)
指示元素中包含的子元素 ,
子元素出现是有顺序的,必须按照声明顺序去编写XML文档。|
子元素只能出现一个,任选其一+
子元素出现1次或多次*
子元素出现0次或多次?
子元素出现0次或1次 <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
<!ATTLIST 元素名称
属性名称 属性类型 属性约束
属性名称 属性类型 属性约束
>
属性值类型:
CDATA
:表示属性的取值为普通的文本字符串ENUMERATED
(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)ID
:表示属性的取值不能重复(不能只写数字)设置说明
#REQUIRED
:表示该属性必须出现#IMPLIED
:表示该属性可有可无#FIXED
:表示属性的取值为一个固定值。语法:#FIXED "固定值"
直接值
:表示属性的取值为该默认值<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
<!ENTITY …>
语句用于定义一个实体。<!ENTITY 别名 “值”>
在元素中引用 &别名
;
<!ENTITY 别名 "值" >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价,简介)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<!ELEMENT 简介 (#PCDATA)>
<!ATTLIST 书
出版社 (清华出版社|人民出版社) #REQUIRED
编号 ID #IMPLIED
出版日期 CDATA #FIXED "2014-11-17"
>
<!ENTITY username "张三" >
]>
<书架>
<书 出版社="清华出版社" 出版日期="2014-11-17">
<书名>javaweb开发大全</书名>
<作者>&username;</作者>
<售价>99.8元</售价>
<简介>这是不错啊</简介>
</书>
<书 编号="b1" 出版社="人民出版社">
<书名>葵花宝典</书名>
<作者>岳不群</作者>
<售价>99.8两</售价>
<简介>欲练此功...</简介>
</书>
</书架>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 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>
]>
<TVSCHEDULE NAME="">
<CHANNEL CHAN="">
<BANNER>CCAV</BANNER>
<DAY>
<DATE>2014-11-17</DATE>
<PROGRAMSLOT>
<TIME>19:00</TIME>
<TITLE>新闻联播</TITLE>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>
XML解析方式分为两种:DOM方式和SAX方式
DOM
:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。SAX
:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。XML解析开发包
JAXP
:是SUN公司推出的解析标准实现。Dom4J
:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)JDom
:是开源组织推出的解析开发包。JAXP
:(Java API for XML Processing)开发包是JavaSE
的一部分,它由以下几个包及其子包组成:org.w3c.dom
:提供DOM方式解析XML的标准接口org.xml.sax
:提供SAX方式解析XML的标准接口javax.xml
:提供了解析XML文档的类javax.xml.parsers
包中,定义了几个工厂类。我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。 DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。
在dom中,节点之间关系如下:
父节点(parent)
子节点(children)
兄弟节点(sibling)
节点后代(descendant)
祖先(ancestor)
javax.xml.parsers
包中的DocumentBuilderFactory
用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法
,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。
JAXP 在DOM方式下解析HTML使用的类和方法
document.getElementsByTagName(“”)
可以获取节点集合
返回NodeList
Document.createElement(“”)
可以创建元素对象
。setTextContent()
appendChild()方法
加入子节点。DOM树形结构
回写到xml文件中。TransformerFactory
工厂类创建Transformer
回写类,通过transform(Souuce,Result)
方法回写xml。 New DOMSource(document)
和 new StreamResult(xml)
回写完成。javax.xml.transform包
中的Transformer类
用于把代表XML文件的Document对象转换为某种格式后进行输出 Transformer类
通过transform方法
完成转换操作,该方法接收一个源和一个目的地。我们可以通过: javax.xml.transform.dom.DOMSource类
来关联要转换的document对象, javax.xml.transform.stream.StreamResult
对象来表示数据的目的地。Transformer
对象通过TransformerFactory获得
。//book2.xml
<书架>
<书 编号="b2">
<书名>javaweb开发大全</书名>
<作者>班长</作者>
<售价>99.8元</售价>
<简介>这是不错啊</简介>
</书>
<书>
<书名>葵花宝典</书名>
<作者>岳不群</作者>
<售价>99.8两</售价>
<简介>欲练此功...</简介>
</书>
</书架>
//JaxpDomTest.java
package cn.itcast.jaxp;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import cn.itcast.utils.JaxpDomUtil;
/**
* JAXP的DOM解析XML
* @author Administrator
*
*/
public class JaxpDomTest {
public static void main(String[] args) {
try {
run3();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取作者的文本内容
* @throws Exception
*/
public static void run1() throws Exception{
// 获取解析器工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML的文档,返回document对象
Document document = builder.parse("src/book2.xml");
// 获取作者元素对象的集合,返回NodeList
NodeList nodeList = document.getElementsByTagName("作者");
// 循环遍历,拿到每一个作者,打印文本的内容,getTextContent()
for(int i=0;i<nodeList.getLength();i++){
Node node = nodeList.item(i);
System.out.println(node.getTextContent());
}
}
/**
* 需求:在第二本下,在末尾添加子节点
* @throws Exception
*/
public static void run2() throws Exception{
// 获取工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析xml,返回document对象
Document document = builder.parse("src/book2.xml");
// 获取第二本书
Node book2 = document.getElementsByTagName("书").item(1);
// 创建元素对象
Element cat = document.createElement("猫");
// 设置文本内容
cat.setTextContent("我是猫");
// 把元素对象添加到第二本书下
book2.appendChild(cat);
// 回写
// 创建回写类的工厂
TransformerFactory transformerFactory = TransformerFactory.newInstance();
// 获取回写类
Transformer transformer = transformerFactory.newTransformer();
// 调用回写的方法
transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));
}
/**
* 删除节点
* @throws Exception
*/
public static void run3() throws Exception{
String path = "src/book2.xml";
// 获取文档对象
Document document = JaxpDomUtil.getDocument(path);
// 获取猫
Node cat = document.getElementsByTagName("猫").item(0);
// 获取书(猫的父节点)
Node book2 = cat.getParentNode();
// 通过书删除猫
book2.removeChild(cat);
// 回写
JaxpDomUtil.writeXML(document, path);
}
}
package cn.itcast.utils;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
/**
* JAPTDOM解析的工具类
* @author Administrator
*
*/
public class JaxpDomUtil {
/**
* 通过path获取document对象
* @param path
* @return
* @throws Exception
*/
public static Document getDocument(String path) throws Exception{
// 获取工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析xml
return builder.parse(path);
}
/**
* 回写方法
* @param document
* @param path
* @throws Exception
*/
public static void writeXML(Document document,String path) throws Exception{
// 获取回写类的工厂
TransformerFactory factory = TransformerFactory.newInstance();
// 获取回写类
Transformer transformer = factory.newTransformer();
// 回写
transformer.transform(new DOMSource(document), new StreamResult(path));
}
}
标签:
原文地址:http://blog.csdn.net/lutianfeiml/article/details/51174446