标签:
一、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书写规范
eg:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>浪潮之巅</书名>
<作者>吴军</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>数学之美</书名>
<作者>吴军</作者>
<售价>28.00元</售价>
</书>
</书架>
文件清单:book.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
编程校验XML文档的正确性
以下为JavaScript代码
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.validateOnParse = "true";
xmldoc.load("book.xml");
var reason = xmldoc.parseError.reason;
var lineNum = xmldoc.parseError.line;
document.write("reason:"+reason+",lineNum"+lineNum);
DTD语法、用的时候查一下手册吧
·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文档的类
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"));
·DOM4J:开源组织推出的解析开发包
·JDom:开源组织推出的解析开发包(目前比较不流行)
04---XML编程整理
标签:
原文地址:http://www.cnblogs.com/rocomp/p/4748787.html