您的位置:首页 > 编程语言

04---XML编程整理

2015-08-21 19:03 155 查看
一、XML概述

XML(eXtensible Markup Language),可扩展标记语言,

被设计的宗旨是传输数据,而非显示数据

W3C发布的,目前遵循1.0规范

XML标签没有被预定义,需要用户自行定义标签

XML是一种通用的数据交换格式,需要Parser(解析器)来执行或显示

通常用于软件的配置文件,来提高灵活性

二、XML语法

1、文档的组成

·文档声明

<?xml version="1.0" encoding="UTF-8"?>

必须出现在文档的第一行,默认编码为utf-8,

standalone属性说明文档是否独立,即是否依赖其他文件

·元素

标签不允许交叉嵌套

一个XML文档必须有且仅有一个根标签

XML中不会忽略主体内容中出现的空格和换行。

严格区分大小写

只能以字母或下划线开头,不能以xml开头

字符之间不能有空格、制表符、不能使用冒号

·元素属性

一个元素可以有多个属性,但不允许重复,

属性值必须放在引号中,单双都可以

在某些场合,如需要传输尽可能小的文件时,可以把子元素写成属性方式,节省空间

·注释

<!-- 注释内容-->、 注释不能嵌套,会提前匹配到结束

·CDATA区

是Character Data的缩写,不会被解析器解析的文本

<![CDATA[ 包含标签的内容 ]]>

·特殊字符



·处理指令(PI:Processing Instruction)

即第一行声明的语句,告诉软件如何解析XML文档

三、XML约束

XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确的获取

文件中的内容而报错(如Tomcat,网易新闻客户端例子)

XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档成为约束

格式良好的XML:遵循XML语法的XML

有效的XML:遵循约束文档的XML

总之,约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等

常用的约束技术:

·XML DTD

DTD(Document Type Definition):文档类型定义,用于约束XML书写规范

编程校验XML文档的正确性

以下为JavaScript代码

//创建XML文档解析器对象

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");

//开启xml校验器

xmldoc.validateOnParse = "true";

//装载xml文档

xmldoc.load("book.xml");

//获取错误信息

var reason = xmldoc.parseError.reason;

var lineNum = xmldoc.parseError.line;

document.write("reason:"+reason+",lineNum"+lineNum);

DTD语法、用的时候查一下手册吧

·XML Schema

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

XML Schema 可针对未来的需求扩展

XML Schema 支持数据类型

XML Schema 支持命名空间

·XDR 比较少用

·SOX 比较少用

四、XML解析

使用Java解析XML分两种方式:DOM方式和SAX方式

·DOM:文档对象模型,是W3C推荐的处理XML的一种方式

·SAX:Simple API for XML,是比较流行的开源社区XML-DEV,几乎所有解析器都支持

XML解析开发包:

·JAXP:SUN公司推出的解析标准实现

Java API for XML Processing。开发包是JavaSe的组成部分

包含: org.w3c.com:提供DOM方式解析XML的标准接口

org.xml.sax:提供SAX方式解析XML的标准接口

Javax.xml:提供了解析XML文档的类



//获取jaxp解析器的标准操作

DocumentBuilderFactory dbf = DDocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse("xxx.xml");

//执行增删改查操作

//写回硬盘的标准做法

TransformerFactory tsf = TransformerFactory.newInstance();

Transformer tsTransformer = tsf.newTransformer();

tsTransformer.transform(new DOMSource(doc),

new StreamResult("xxx.xml"));

SAX方式:

使用SAXParserFactory创建SAX解析工厂

XParserFactory spf = SAXParserFactory.newInstance();

通过SAX解析工厂得到解析器对象

XParser sp = spf.newSAXParser();

通过解析器对象得到一个XML的读取器

LReader xmlReader = sp.getXMLReader();

设置读取器的事件处理器

lReader.setContentHandler(new BookParserHandler());

解析xml文件

lReader.parse("book.xml");

·DOM4J:开源组织推出的解析开发包

由早期开发JDOM的人分离出去而独立开发的一个简单、灵活的开放源代码库

一款非常优秀的Java XML API,需要下载jar包

//获取document对象

SAXReader reader = new SAXReader();
Document document = reader.read(url);

//制定编码的写回方式

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
MLWriter writer = new XMLWriter(new FileOutputStream("output.xml"),format);
writer.write(document);
writer.close();

支持XPath:

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集

·JDom:开源组织推出的解析开发包(目前比较不流行)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: