XML笔记杰普.docx
《XML笔记杰普.docx》由会员分享,可在线阅读,更多相关《XML笔记杰普.docx(11页珍藏版)》请在冰豆网上搜索。
![XML笔记杰普.docx](https://file1.bdocx.com/fileroot1/2023-1/27/dd3e8609-e2b5-4ee7-84d8-8236afd2437a/dd3e8609-e2b5-4ee7-84d8-8236afd2437a1.gif)
XML笔记杰普
XML笔记
XML简介:
什么是XML?
有什么作用?
是一种元标记语言,可以定义新的标记,和HTML比较相似,但是更强大
基本作用是用来交换数据的,我们可以把它当作是一个文本数据库,也可以用做配置文件等
XML背景:
1)XML代表扩展的标记语言(eXtensibleMarkupLanguage);
2)XML由W3C联盟发展维护;
3)XML是一种元语言,可以用来定义其它标签语言;
4)XML没有定义任何标记,它提供了一种工具定义标记以及它们之间的结构关系;
5)XML是一种用于结构化文本交换的标记语言;
6)XML代表了内容的结构也代表了内容本身;
7)XML继承自SGML(标准标记语言)。
SGML的前身GML由IBM在1960年发明,用于描述设备无关的文本
8)XML是SGML的子语言,由SGML简化而来,起初目的是为Web的结构文档提供服务。
9)W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。
10)XML是分层的树形结构的自解释的一种可扩展的标记语言。
XML与HTML的关系:
事实上,HTML和XML不能够进行比较的。
因为XML是一种元语言,而HTML是一种定义好的标记语言。
XML是描述数据的语言,HTML是描是数据外观的语言。
HTML有一套确定的标记。
在W3C标准规范中定义了HTML标记的含义并由部分浏览器实现了。
HTML标记非常适合描述人类易读的可视化文本。
HTML定义了许多表现指令用以优化在浏览器中的显示。
在HTML标记中,数据固有的结构丢失了。
HTML没有维持数据类型信息的完整性、约束、或实体间的其它关系,而XML提供了这些特征。
XML文档的结构:
XML文档=序言+元素+杂项(可选)
1)序言
序言=(XML声明)+(杂项)+(文档类型声明)
XML声明
xml版本信息 (编码信息)(文档独立性信息)?
>
如:
xmlversion="1.0"encoding="gb2312"standalone="yes"?
>
文档类型声明
规定元素的结构和属性列表的取值
如:
DOCTYPEstudinfoSYSTEM"studinfo.dtd">
2)元素
空元素:
<空元素标签名属性="属性值"/>
非空元素:
<起始标签>内容<结束标签>
内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)*
字符数据
字符数据中,不能含有&,<,>,',",需要采用实体引用的方式
字符数据段:
[CDATA[字符数据]]>
引用:
ENTITY 引用名 ".......">
3)杂项
处理指令:
XML为其它应用程序准备的接口。
处理指令?
>
注释
-- 注释内容 -->
空白符指空格、回车等
例子:
xmlverson="1.0"?
>
--这一句一定要求写在文件的第一行-->
--只能有一个根元素即那一对根标签-->
--根标签-->
--根元素的内容-->
--子元素-->
...
XML良好的格式规范是什么?
1)文档声明位于文件的开头
xmlversion="1.0"?
>
2)文档中只能定义一个唯一的根元素(根元素是在文档声明之后的最外层的元素)
3)标签必须闭合,且不能交叉,有元素的起始标签,就必须有其结束标签(空元素除外)
4)层层嵌套,每一对标签总是出于另一对标签的内或和其处于同一层,不能交叉(根元素chuw)
5)大小写敏感,起始标签和结束标签的名字要一致
6)属性值必须用引号引起来
7)注意特殊字符,使用时需要使用转义字符。
注意:
1.第一行一定要写
xmlversion="1.0"?
>
2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标签和标签的内容加在一起叫作一个元素。
xml是大小写敏感的,只能以字母或下划线开头。
XML的语法(如何书写一个XML文档)
XML文档是由标签和标签的内容组成的,把这个组合称为元素
非空元素
(起始标签)
aaa(内容)
(结束标签)
空元素
XML的字符转义:
就是用一个字符代表一种意义
如:
< 代表 "<",> 代表 ">"," 代表双引号。
& 代表 "&",' 代表单引号
CDATA[........]>
....的部分不必使用转义,其中内容会直接输出。
引用:
实体声明:
ENTITY 引用名 "......">
使用实体,引用
&引用名
例子:
xmlversion="1.0"encoding="gb2312"?
>(XML文件的声明)
--thisisacommenthehe-->(注释)
(根元素)
(空元素)
张三
XSLT,是用于对XML进行文档格式转换,把一个XML文档转换成另一种格式的XML文档,但是其中内容是不变的。
DTD:
文档类型的定义,可以定义元素等
在XML文档中调用DTD:
两种方法:
第一种,内部调用一个DTD:
xmlversion="1.0"standalone="no"?
>
--必须名字都一样g-->
--这是一个内部调用DTD的方法-->
DOCTYPEg[
ELEMENTg(#PCDATA)>
]>
注意:
studinfo与(#PCDATA)有空格
文档类型名与根元素名必须一致
第二种,外部调用一个DTD文件
注意点:
(1)standalone="no"
(2)注意dtd文件的路径
DTD的结构
1. 元素类型声明:
指明元素的名字和内容
ELEMENT 元素名字 (元素内容)>
元素内容=EMPTY||ANY|| 元素内容 ||#PCDATA
#PCDATA:
可解析的字符数据
元素内容:
指定的子元素
EMPTY:
代表空元素
ANY:
任何都可以
元素的出现次数可以选:
* 零次或多次
+ 一次或多次
?
零次或一次
| 可选
2. 属性声明
属性:
由“=”分隔的成对的属性名和属性值构成,只能出现在元素标记的内部。
结束标记不能带属性,一个元素可以具有多个属性
ATTLIST 对应的元素名属性名属性取值类型属性默认值>
属性取值类型
1、CDATA:
可析字符
2、Enumerated:
枚举类型,由“|”分隔的可能的属性值列表
3、Entity:
实体
4、ID属性值:
属性值不能重复
属性默认值:
注意
1、#REQUIRED:
必须提供属性值
2、IMPLIED:
可提供也可不提供
3. FIXED:
不能修改
3. 实体声明
ENTITY 实体名字 “helloworld!
”>
&实体名字
名域空间:
什么是名域空间?
干什么用的?
解决XML文档中命名冲突的问题,即将XML文档与引用URI标识的名域相结合,来限定其中的元素和属性名
名域的声明:
直接定义
类比:
名字和身份证
语法:
xmlns:
名域前缀=”url”(唯一性)
2. 缺省声明
xmlns=”url”
名域的使用:
用名域限定元素、用名域限定属性
解析器:
什么是解析器?
有什么用?
1. 读取XML文档
2. 如果有DTD,也拿过来读,分析XML的结构内容并进行处理(从XML文档中得到信息)、验证XML是否格式良好有效。
JAVA中解析XML文档(XML有四种解析方式)
在java中如何解析一个xml文档呢?
先看看xml的解析方式
xml有四种解析方式:
1. Dom:
文档对象模型
2. SAX:
事件机制驱动
3. Jdom
4. JADP
SAX:
基于事件处理模型,在读取XML文件时会触发相应的事件,这些事件被预先注册的事件处理器来处理
优点:
速度快,占用的资源少,边读边解析,适合要求快速处理XML文档的场合,如:
Applet等
缺点:
不能前后遍历,不能增删改
/**知识点:
SAX解析方式来解析XML文档
* 程序目标:
*java文件:
*MyContentHander.java:
监听器类(SAX解析方式是基于事件处理的方式)
* 在java中解析一个XML文档,将里面的元素读取出来打印到终端上
* 要求使用SAX解析方式
* 流程:
*1.得到工厂对象
*2.使用工厂对象创建SAXParser
*3.使用SAXParser对象得到一个XMLReader对象,这个对象可以解析XML文档
*4.为XMLReader对象注册监听器
*5.使用XMLReader对象的parse()方法执行XML文件进行解析*/
packageMY.SAX;
importjava.io.IOException;
importjavax.xml.parsers.*;
importorg.xml.sax.InputSource;
importorg.xml.sax.SAXException;
importorg.xml.sax.XMLReader;
publicclassSAXTest{
publicstaticvoidmain(String[]args)throwsParserConfigurationException,SAXException,IOException{
SAXParserFactoryfactory=SAXParserFactory.newInstance();
SAXParsersp=factory.newSAXParser();
XMLReaderxr=sp.getXMLReader();
InputSourceis=newInputSource(newString("student.xml"));
xr.setContentHandler(newMyContentHander());
xr.parse(is);
// xr.parse("student.xml");
}
}
packageMY.SAX;
importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;
publicclassMyContentHanderextendsDefaultHandler{
publicvoidcharacters(char[]arg0,intarg1,intarg2)throwsSAXException{
System.out.println(newString(arg0,arg1,arg2));
}
publicvoidendDocument()throwsSAXException{
System.out.println("end");
}
publicvoidendElement(Stringarg0,Stringarg1,Stringarg2)throwsSAXException{
System.out.println(arg1);
}
publicvoidstartDocument()throwsSAXException{
System.out.println("start");
}
publicvoidstartElement(Stringarg0,Stringarg1,Stringarg2,Attributesarg3)throwsSAXException{
System.out.println(arg1);
}
}
DOM:
文档对象模型
将整个XML文件读到内存中,然后转化为一棵由各种节点组成的树
优点:
可以前后遍历XML,也可以增删改任意的节点
缺点:
占用的资源多,速度慢,不适合处理大型的XML文档
/**
* 知识点:
DOM解析方式解析一个XML文件
* 程序目标:
将XML文件中的元素属性全部打印出来
*/
packageMY.DOM;
importjava.io.IOException;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NamedNodeMap;
importorg.w3c.dom.Node;
importorg.xml.sax.SAXException;
publicclassDomTest{
publicstaticvoidtest(Nodestart){
System.out.println("nodeName:
"+start.getNodeName()
+"nodeValue:
"+start.getNodeValue());
for(Nodechild=start.getFirstChild();
child!
=null;child=child.getNextSibling()){
test(child);
}
}
publicstaticvoidtest2(Nodestart){
System.out.println("NodeName:
"+start.getNodeName()
+"nodeValue:
"+start.getNodeValue());
if(start.getNodeType()==Node.ELEMENT_NODE){
NamedNodeMapnnm=start.getAttributes();
for(inti=0;i Nodenode=nnm.item(i);
System.out.println("attName:
"+node.getNodeName()
+"attValue:
"+node.getNodeValue());
}
}
for(Nodechild=start.getFirstChild();
child!
=null;child=child.getNextSibling()){
test2(child);
}
}
publicstaticvoidmain(String[]args)throwsParserConfigurationException,SAXException,IOException{
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=dbf.newDocumentBuilder();
Documentdoc=builder.parse("student.xml");
Elemente=doc.getDocumentElement();
test2(e);
}
}