第12章 XML 读书笔记

12.1      XML简介

XML(Extensible Markup Language 扩展标记语言),XML区分大小写字母的;不能省略掉结束标记,单标记必须用一个/字符作为结尾;属性值必须封装在引号中,并且必须带有相应的值.

XML文档应该以一个头标开头,<?xml version=” 1.0” ?>,头标可有可无,但最好有;头标后面是文档类型的声明,用于确保文档的正确性,但并不是必不可少的;文档包含根元素,根元素包含子元素,子元素包含子元素、文本或者同时包含子元素和文本.

一些其他的标记说明,:

字符引用  形式 &#d (d十进制)  &#xh (h十六进制) Unicode;

字符实体引用  形式 &name &lt &gt;DTD来定义其他符号实体的引用

  CDATA的各个部分用<![CDATA[and]]>来限定其界限,特殊字符可用其来包含那些含有<>&子类字符的字符串;

  处理命令  将用<??>限定其界限;

  注释用<!---->限定其界限.

 

12.2      分析XML文档

分析器是个程序,它负责读取一个文件,验证该文件是否有正确的格式,将它分割成各个构成元素,并且让程序员访问这些元素.

分析器分为两种:

DOM (文档对象模型)  XML文档读入一个树状机构;

SAX                 读取XML文档时,负责生成相应的事件.

 

DOM读取XML文档的过程:

1.       生成文档构建器

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.new DocumentBuilder();

2.       生成文档对象模型

读文件

File f = …;

Document doc = builder.parse(f);

URL

URL u = …;

Document doc = builder.parse(u);

读输入流

InputStream in = …;

Document doc = builder.parse(in);

3.       读取根节点

Element root = doc.getDocumentElement();

4.       获取子元素

NodeList children = root.getChildNodes();

for(int i = 0; i < children.getLength();i++){

  Node child = children.item(i);

  if(child instanceof Element){

Element childElement = (Element)child;

  }

}

说明:如果文档类型声明,分析器能够抑制空白符,取得真实子元素.

5.       特定取子元素方法

getFirstChild() 取得第一个子元素;

getLastChild() 取得最后一个子元素;

getNextSibling() 取得节点的下一个兄弟元素;

6.       取得元素属性

   所有属性

NameNodeMap attributes = element. getAttributes();

for(int i=0;i<attributes.getLength();i++){

  Node attribute = attributes.item(i);

  String name = attribute.getNodeName();

  String value = attribute.getNodeValue();

 

}

某个属性

String unit = element.getAttribute(“unit”);

7.       其他常用方法

Element.getTagName()  取得元素的名字

CharacterData.getData()  取得节点中的文本

 

12.3      文档类型的定义

如果进行了文档类型的定义(DTD),XML分析器就能够自动检验文档的结构是否正确;DOCTYPE声明外部DTD;ELEMENT规则设定某个元素可以拥有什么子元素,具体采用正则表达式,语法是 <!ELEMENT menu (item)*>;ATTLIST规则设定某个元素的合法属性,语法是 <!ATTLIST element attribute type default>;ENTITY规则定义实体或者说分析时被取代的缩写,例如 <!ENTITY a.b “Back”>.

通过ErrorHandler接口对象的3个方法warning,error,fatalError生成XML分析器检验文档机构报错时的错误处理器;然后用DocumentBuilder.setErrorHandler()安装错误处理器.

 

12.4      名字空间

名字空间使用通用资源标记符(Uniform Resource Identifier,URI)来进行标识;最常用的是HTTPURL,它可以确保名字空间的独一无二性.

 

12.5      使用SAX分析器

使用SAX分析器时,需要一个处理器,以便为各个不同的分析事件定义事件的动作;ContentHandler接口负责定义分析器在对文档进行分析时执行的若干个回调方法.

具体分析步骤:

1.       获取SAX分析器

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

2.       装载XML文档

parser.parse(source,handler);

其中,source可以是文件URL字符串输入数据流其中之一;handler属于DefaultHandler类的一个子类.

3.       接着分析文档

 

12.6      生成XML文档

具体生成步骤:

1.       建立一个空文档

DocumentBuilder …

Document doc = builder.newDocument();

2.       创建文档元素

Element rootElement = doc.createElement(rootName);

Element childElement = doc.createElement(childName);

3.       建立文本节点

Text textNode = doc.createTextNode(textContents);

4.       向文档添加元素

doc.appendChild(rootElement);

rootElement.appendChild(childElement);

childElement.appendChild(textNode);

5.       设定元素属性

rootElement.setAttribute(name,value);

 

12.7      XSL转换

使用XSL的样式表的目的是为了描述XML文档是如何向某种其他格式的文档进行转换的.

 

 

 

 

 

 

                                                           2007-08-09

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值