xml入门学习

1.表单的提交方式:
    *使用submit提交表单
<form>
<input type="submit"...>
</form>
*使用Button提交表单
function form1(){
var form1=document.getElementById("form1");
form1.action="1.html";
form1.submit();
}
*使用超链接提交
<a href="1.html?username=123" >超链接提交</a>
*onclick:鼠标点击事件
onchange:改变内容(一般和select一起使用)
onfocus:得到焦点
onblur:失去焦点


2.xml
*简介:可扩展标记性语言。html是标记性语言,也是使用标签来超载
*可扩展:xml的标签可以自己定义,可以写中文的标签<person></person>,<猫></猫>
        html的标签都是固定的,每个标签都有特定的含义。
*xml用途:为了存储数据。
*xml是W3C发布的技术。现在使用的都是1.0的版本。1.1版本不能向下兼容。


3.xml的应用:
*不同的系统之间传输数据。
比如QQ之间的数据传输
*用来表示生活中有关系的数据。
<中国>
<湖南>
<长沙></长沙>
<湘潭></湘潭>
</湖南>
</中国>
*经常用在配置文件。
*比如现在连接数据库 肯定要知道数据库的用户名和密码,数据名称。
*如果修改数据库的信息 ,就不需要修改源代码,只需要修改你的配置文件。


4.xml的语法:
(1)xml的文档说明
*创建一个文件 后缀名是.xml
*如果写xml文件,第一步必须要有一个 xml文档声明(写了文档声明之后,表示写xml文件的内容) *<?xml version="1.0" encoding="GBK"?>
<person>
<name>张三</name>
<age>20</age>
</person>
*属性:version 版本1.0,encoding:xml的编码gbk ,utf-8, iso8859-1(不包含中文)
Standalone :是否依赖其他文档。Yes/no.
*xml的中文乱码问题的解决: 让保存时候的编码和打开文档的编码保持一致就不会乱码。
(2)定义元素(标签)
*标签的定义:<person>起始标签</person>结束标签
*标签没有内容可以在标签内结束,<aa/>
*标签可以嵌套,但是必须要合理嵌套。
*一个xml只能有一个根标签,其他标签只能是这个根标签下面的标签。
*在xml中会把空格和换行都当作内容来解析。
<a>1111</a>和<a>   1111  </a>是不一样的
*xml中标签的命名规则:
(1)xml中区分大小写。
(2)标签中不能以数字和下划线开头。
    (3)不能以xml这三个字母开头,不管是大写还是小写。
(4)xml标签不能包含空格和冒号
(3)定义属性
*html是标记型文档,可以有属性。Xml也是标记型文档,也可以有属性
**属性定义的要求
1. 一个标签上可以有多个属性,
2. 属性名称不能相同。
3. 属性名称和属性值之间使用=,属性值使用引号标示。
4. 属性的名称规范和元素的名称规范一致。
(4)注释
*写法:<!—xml的注释-->
*注意:注释不能嵌套
(5)特殊字符
*  <号在xml中会被解析成标签。需要特殊转义符。< &lt  >&gt
(6)CDTAT区
*可以解决多个内容需要转义的操作,把这些内容放到转义区CDATA区,就不需要转义了。
写法<![CDATA[内容]]>
(7) PI指令:处理指令
* 可以在xml中设置样式。对中文的标签名称不起作用。
XML的约束:两种:dtd和schema约束

5.dtd的快速入门
*创建一个dtd文件 后缀名.dtd
步骤:
1 看xml中有多少个元素,有几个元素就写几个<!ELEMENT>
2 判断元素是复杂元素还是简单元素:没有子元素的就是简单元素,有的就是复杂元素。
复杂元素:<!ELEMENT 元素名称(子元素)>
子元素:<!ELEMENT 元素名称(#PCDATA)>
3 需要在xml文件中引入dtd的文件。<!DOCTYPE 元素名称 SYSTEM “dtd的路径”>。
*浏览器打开xml文件,用来校验xml的语法,不能校验xml的约束。
*如果需要校验约束需要使用xml的工具eclipse。
6.dtd的三种引用方式:
1 引用外部dtd文件 <!DOCTYPE 元素名称 SYSTEM (“dtd的路径”)>
2 直接在xml中引用 <!DOCTYPE 根元素名称[
<!ELEMENT>
]>



3 使用外部dtd的文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
  STRUTS2 框架使用的配置文件就是外部的DTD文件


7.使用DTD定义元素
*语法:<!ELEMENT 元素 约束>
*简单元素:没有子元素的元素。
<!ELEMENT name (#PCDATA)>  **PCDATA约束元素为字符串类型**EMPTY约束元素为空。
  **ANY 为任意元素。
*复杂元素:<!ELEMENT  元素  (子元素,子元素) > 子元素只能出现一次
**表示子元素出现的次数
+ :表示子元素出现多次。
? :表示出现0次或者1一次。
*:表示出现任意次数可以为0次。
**子元素之间使用逗号隔开,表示元素出现的顺序
**子元素之间使用竖线隔开,表示只能出现所有子元素中的任意一个。
8.使用DTD定义属性:
*语法:<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
*属性类型
-CDATA字符串
-枚举:表示只能在一定的范围内出现值,但是每次只能出现其中一个。
类似红绿灯 (AA|BB|CC)
- ID:它的值只能以字母或者下划线开头。
*属性的约束:#REQUIRED 表示属性必须存在
  #IMPLIED 表示属性可有可无
  #FIXED  表示属性的固定值,属性的值必须是个固定值。
- 直接值 *不写属性,使用直接值
  *写了属性,使用设置的那个值
9.实体的定义:
*语法:<!ENTITY 实体的名称 “实体的值”>
  ***<!ENTITY TEST “hhhh”>
使用实体 &实体名称 比如 &TEST;
**注意 定义实体需要写内部在DTD里面
如果写在外部的dtd 有些浏览器 内容得不到的。

10.xml的解析简介(写到JAVA代码)
*XML是标记型文档
*JS使用DOM解析标记型文档
-根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象
-document对象,Element对象,属性对象,文本对象,Node节点对象。
*xml的解析方式:dom和sax
**dom解析:根据xml的层级结构在内存中分配一个树形的结构,把xml的标签,属性,文本都封装成对象,缺点:如果文件过大,会造成内存溢出。优点:很方便进行增删改操作。
**sax解析:采用事件驱动,边读边解析。
缺点:不能实现增删改操作。
优点:如果文件过大,不会造成内存溢出,方便实现查询操作。
想要解析xml需要解析器
**针对不同公司和组织提供了针对dom和sax方式的解析,通过api方式提供。
**sun公司针对dom和sax提供的解析器是jaxp。
**dom4j组织针对dom和sax解析器是dom4j。
**jdom组织针对dom和jax提供的解析器是 jdom。


11.jaxp的API的查看
**jaxp是javase的一部分。
**jaxp解析器在JDK的javax.xml.parsers包里面。
**四个类:分别是针对dom和sax解析使用的类。
**dom:
DocumentBuilder:解析器类,这个类是一个抽象类,不能new
-此类的实例可以从DocumentBuilderFactory.new Documentbuilder()获取。
-可以解析xml parse(“xml”的路径)返回的是整个Document文档。
-返回的Document是一个接口,父节点是Node,如果在Document里面找不到想要的方法,到Dode里面去找
在Document里面方法 :
-getElementByTagName(String tagname)这个方法可以得到标签,返回集合Nodelist.
-createElement(String tagName) 创建标签
-createTextNode(String data) 创建文本,创建给定指定字符串的 Text 节点。
-appendChild(Node newChild) 将节点 newChild 添加到此节点的子节点列表的末尾。把文本添加到标签下面。
-removeChild(Node oldChild) 从子节点列表中移除 oldChild 所指示的子节点,并将其返回
-getParentNode() 此节点的父节点。
-NodeList里面有两个方法getLenth()获取长度,item(index)下标取到的具体的值。
for(int i=0;i<list.getLenth();i++){
list.item(i);
}
DocumentBuilderFactory:解析器工厂,这个类也是一个抽象类,不能new 
New Instance()获取DocumentBuilderFactory的实例。


12.使用jaxp实现查询操作:
*查询xml中所有Name的值。
*步骤:
***查询所有Name元素的值。
//创建解析器工厂
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder=builderFactory.newDocumentBuilder();
//解析xml,返回Document
Document document=builder.parse("src/day5.xml");
//得到所有的Name元素
NodeList list=document.getElementsByTagName("name");
//遍历集合,得到每一个Name元素
for (int i = 0; i < list.getLength(); i++) {
Node name1=list.item(i);
String s=name1.getTextContent();
System.out.println(s);
}


***查询xml中的某一个
/*
* 1。创建解析工厂。
* 2。根据解析工厂创建解析器。
* 3.解析xml返回的Document。
* 4.得到所有name元素.
* 5.使用返回集合,里面的方法item,下标获取具体的元素。
* 6.得到具体的值,使用getTextContent()方法
*/
DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=buildFactory.newDocumentBuilder();
Document document=builder.parse("src/day5.xml");
Node list=document.getElementsByTagName("name").item(1);
String s1=list.getTextContent();
System.out.println(s1);


13.使用jaxp添加一个节点:
/*
* 1.创建解析工厂。
* 2.根据解析工厂创建解析器。
* 3.解析xml返回Document。
* 4.得到第一个p1-得到所有的P1,使用item下标得到。
* 5.创建sex标签 createElement.
* 6.创建文本 CreateTextNode.
* 7.把文本添加到sex下面 appendChild
* 8.把sex添加到第一个p1下面。
* 9。回写xml。
*/
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/day5.xml");
NodeList list=document.getElementsByTagName("p1");
Node p1=list.item(0);
Element sex1=document.createElement("sex");
Text text1=document.createTextNode("nv");
sex1.appendChild(text1);
p1.appendChild(sex1);

TransformerFactory transformerFactory =TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/day5.xml"));


14.使用jaxp修改一个节点:
/*
* 1.创建解析工厂。
* 2.根据解析工厂创建解析器。
* 3.解析xml返回Document。
* 4.得到sex item的方法。
* 5.修改sex里面的值, setTextContent方法。
* 6.回写xml。
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值