1.1 标记语言的发展
1986:标准通用置标语言(Standard Generalized Markup Language,SGML)
1989:超文本置标语言(HyperText Markup Language,HTML)
1998:可扩展标记语言(eXtended Markup Language,XML)
1.2 可扩展标记语言XML
XML与HTML不同:1)XML标签不是预定义的,可根据需要自行定义;2)XML标签及其内容称为元素,XML元素可以由任意多层嵌套组成;3)XML文档只描述数据而不包括显示格式,其显示可以由另一文件描述。
XMl是一种语法要求比较严格的标记语言。如果一个XML文档满足以下要求,则称其为一个结构良好的XML文档:
1)文档的开始必须是XML声明(<?xml Version="1.0" encoding="gb2312"?>)
2)含有数据的元素必须有起始标记和结束标记,起始标记和结束标记应当匹配,且大小写一致。XML对字母的大小写是敏感的。
3)不含数据并且仅使用一个标记的元素必须以/>结束。
4)文档只能有一个能够包含全部其他元素的元素,即根元素必须唯一。
5)元素只能嵌套不能重叠。
6)属性值必须加引号,属性是不允许重复的。
7)字符<和&只能用于其实标记和实体引用。
8)出现的实体应用只有&、<、>、&apos和"o。
9)文档必须包含一个或多个元素。
10)元素必须正确关闭。
1.3 DTD简介
DTD可以定义XML文档的词汇和语法。
典型的DTD格式:
1)以DOCTYPE声明为起始标志,告诉解析器以下内容属于DTD
2)位于DOCTYPE后的DTD名称,必须与XML文档中的根元素完全一致,后面是一个“[”号,接下来是DTD正文。
DTD正文格式:
1)零到多个注释部分,DTD注释与XML注释的语法完全相同。
2)零到多个<!ELEMENT…>定义,每个<!ELEMENT…>定义一个XML元素。
3)零到多个<!ATTLIST…>定义,每个<!ATTLIST…>定义一个属性。
4)零到多个<!ENTITY…>定义,每个<!ENTITY…>定义一个实体。
5)零到多个<!NOTATION…>定义,每个<!NOTATION…>定义一个符号。
DTD中表示频率的特殊标记有3个:
+:表明子元素可以出现1次或多次;
*:表明子元素可以出现0次或多次;
?:表明子元素可以出现0次或1次。
对属性的限定条件:
#REQUIRED:必须的属性,意味着必须为该元素提供该属性;
#IMPLIED:该属性是可有可无的;
#FIXED:该属性的值是固定的,定义是必须指定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为属性增加固定值。
DTD对实体声明分为以下三种情况:
1)定义普通实体<!ENTITY 实体名 “实体值”>
2) 外部普通实体<!ENTITY 实体名 SYSTEM "实体值所在文件的URI"><!ENTITY 实体名 PUBLIC "公用实体标识名" "实体值所在文件的URI">
3)外部参数实体<!ENTITY %实体名 SYSTEM|PUBLIC["公用实体标识名"] "实体值所在文件的URI">
DTD的不足之处:
1)DTD过于复杂
2)DTD对数据类型定义支持不够
3)扩展机制复杂
4)DTD不支持名称空间的机制
1.4 XML Schema
与DTD相比,XMLSchema具有以下几个明显的优势:
1)XML Schema 使用XML语法
2)XML Schema 支持名称空间。
3)XML Schema 支持多种数据类型。
4)XML Schema 具有更为强大和灵活的定义能力。
一个例子:
<?xml version="1.0" encoding="GB2312"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="name"/>
<ElementType name="sex"/>
<ElementType name="age"/>
<ElementType name="birthday" content="eltOnly">
<element type="year"/>
<element type="month"/>
<element type="day"/>
</ElementType>
</Schema>
Schema域名的一个定义
eltOnly可以知道birthday元素的数据只能够由元素构成。
1.5 XPath
1)选择所有book元素://book
2)选择未知元素:/books/*/title
3)选择分支:(第一个)/books/book[1],(最后一个)/books/book[last()]
4)选择几个路径:books/book/title|/books/book/author
5)选择属性:
//@year
//book[@year]
//book[@year="2010"]
1.6 XML文档解析器
1、SAX简介
SAX提供一种顺序访问XML文档的方式,整个XML解析过程类似于流媒体的处理过程。该模型可在不关注文档完整结构的情况下测定其特征或相关数据。
SAX按照下列步骤来解析XML文档:
1)设置事件的处理器,即对ContentHandler接口做相应的实现。
2)产生解析器,载入需要解析的文档并注册相应的事件处理器。
3)在感兴趣的时间方法中加入合适程序需要的控制逻辑,如果需要的话,可以产生自己的对象模型。
4)根据文档解析过程中产生的时间,调用相应的时间处理方法。
5)重复4)直至文档解析结束。
2、DOM简介
用一种树状结构来存储XML文档,它吧整个树状结构以Document对象为跟,其余所属元素及属性构成根的子树。
对DOM树的节点进行各种随机操作:
1)Document对象:作为树的最高节点,Documennt对象是对整个文档进行操作的入口。
2)Element和Attr对象:这些节点对象都是文档某一部分的映射,节点的定级层次恰好反映了文档的结构。
3)Text对象:作为Element和Attr对象的子节点,Text对象表达了元素或属性的文本内容。Text节点不再包含任何子节点。
4)集合索引:DOM提供了几种集合索引方式,可以对节点按指定方式进行遍历。索引参数都是从0开始计数。
3、SAX和DOM的比较
DOM适用于需要结构化编辑XML文档、对文档的结构有清楚的了解,以及和其他应用共享XML文档的情况。DOM占用内存比较大,执行速度较慢。
SAX适用于:1)只需要XML文档中抽取部分元素;2)文档比较大,没有足够的内存来进行处理;3)不和其他应用共享XML文档。
<? xml Version="1.0" encoding="gb2312"?>
<books>
<book email="aa@123.com">
<title>XML Retrieval</title>
</book>
<book email="bb@123.com">
<title>information Retrieval</title>
</book>
</books>
解析算法:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;
public class JDomParse {
public JDomParse(){
String xmlpath="MyXml.xml";
SAXBuilder builder=new SAXBuilder(false);
try{
Document doc=builder.build(new FileInputStream(xmlpath));
Element books=doc.getRootElement();
List<Element> booklist=books.getChildren("book");
java.util.Iterator<Element> iter=booklist.iterator();
while(iter.hasNext())
{
Element book=(Element)iter.next();
String email=book.getAttributeValue("email");
System.out.println(email);
String name=book.getChildTextTrim("title");
System.out.println(name);
book.getChild("title").setText("alterrjzjh");
}
XMLOutputter outputter=new XMLOutputter();
outputter.output(doc, new FileOutputStream(xmlpath));
}catch(JDOMException e)
{
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new JDomParse();
}
}
xml相关四种解析http://blog.csdn.net/jzhf2012/article/details/8532873
1.7 XML特点及其应用
XML数据的优点在于:
1)他允许各个组织、个人建立适合自己需要的置标集合。
2)数据存储格式不受显示格式的约束。
3)应用于Internet上的数据交换,XML数据的出现使得可以实现各种格式数据之间的无缝交换,因为其具有数据自我描述性和丰富的数据表达能力。
4)实现更有意义、更准确的搜索。
5)实现异构、异质系统间的通信。