第一章 XML技术

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)出现的实体应用只有&amp、&lt、&gt、&apos和&quoto。
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)实现异构、异质系统间的通信。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值