什么是 XML?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输和存储数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
example:
XML 声明
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)其他版本。XML 声明通常在 XML 文档的第一行出现。 XML 声明不是必选项,但是如果使用 XML 声明,必须在文档的第一行,前面不得包含任何其他内容或空白。
- 版本号:
<?xml version="1.0"?>
这是必选项。更新版本号到当前使用版本。 - 编码声明:
<?xml version="1.0" encoding="UTF-8"?>
这是可选项。不区分大小写。( XML 分析器可以自动确定文档使用的是 UTF-8 还是 UTF-16 Unicode 编码,但是其他编码需要注明) - 独立声明:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
可选项。独立声明指示文档的内容是否依赖来自外部源的信息,例如外部文档类型定义 (DTD)。如果 “yes”,则如果文档引用外部 DTD 或外部实体,分析器将报告错误。省略独立声明与包含独立声明 “no” 的结果相同。 XML 分析器将接受外部源(如果有)而不报告错误。
XML 语法规则
- 所有 XML 元素都须有关闭标签
注释:您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是 XML 元素,也不需要关闭标签。
- XML 标签对大小写敏感
- XML 文档必须有根元素
- XML 必须正确地嵌套
- XML 的属性值须加引号
- 特殊字符使用实体引用
- XML 中的注释
<!-- This is a comment -->
- 在 XML 中,空格会被保留,不会像html那样把多个连续的空格字符裁减(合并)为一个
验证 XML 文档
合法的 XML 应该遵守文档类型定义 (DTD) 的语法规则:12345678<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE note SYSTEM "Note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>
在上例中,DOCTYPE 声明是对外部 DTD 文件的引用。下面的段落展示了这个文件的内容:
w3c提供了一个xml语法验证器:http://www.w3school.com.cn/xml/xml_validator.asp,可以对XML 文件进行语法检查
浏览器支持情况
Mozilla Firefox | Mozilla | Netscape | Opera | Internet Explorer |
---|---|---|---|---|
1.0.2 + | all | 8+ | 8+ | 6+ |
使用css样式化xml
通过<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
添加外联样式。
cd_catalog.css
样式表可能会像这样:
使用 XSLT 显示 XML
XSLT 是首选的 XML 样式表语言。XSLT (eXtensible Stylesheet Language Transformations) 远比 CSS 更加完善。
使用 XSLT 的方法之一是在浏览器显示 XML 文件之前,先把它转换为 HTML,如下所示:
simple.xsl
样式表可能像这样:
在上例中,XSLT 转换是由浏览器完成的,浏览器读取的是 XML 文件。
在使用 XSLT 来转换 XML 时,不同的浏览器可能会产生不同结果。为了减少这种问题,可以在服务器上进行 XSLT 转换。
XMLHttpRequest 对象
用于在后台与服务器交换数据。它能够:
- 在不重新加载页面的情况下更新网页
- 在页面已加载后从服务器请求数据
- 在页面已加载后从服务器接收数据
- 在后台向服务器发送数据
所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera)都支持 XMLHttpRequest 对象。
创建 XMLHttpRequest 对象的语法:
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:
XML 解析器(error http://www.w3school.com.cn/xml/xml_parser.asp)
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。
微软的 XML 解析器与其他浏览器中的解析器之间,存在一些差异。微软的解析器支持 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都包含遍历 XML 树、访问插入及删除节点(元素)及其属性的函数。
命名冲突
|
|
|
|
如果这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table>
元素,就会发生命名冲突。
- 使用前缀来避免命名冲突1234567#1.xml<h:table><h:tr><h:td>Apples</h:td><h:td>Bananas</h:td></h:tr></h:table>
|
|
- 使用命名空间1234567#1.xml<table xmlns="http://www.w3.org/TR/html4/"><tr><td>Apples</td><td>Bananas</td></tr></table>
|
|
<table>
标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
CDATA
所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。PCDATA 指的是被解析的字符数据(Parsed Character Data)。
CDATA 部分由 “<![CDATA[“ 开始,由 “]]>” 结束:
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。
有用的关于xml的第三方模块
下面是在github上star数排在前面的几个模块:
- HackMyResume:命令行工具,可以将json转换为yml(其他功能没有用过不太清楚)
- node-xml2js:这是一个很酷的模块,提供解析xml,生成xml等功能,还有丰富的可配置参数,推荐使用。
- mr-data-converter:可以将Excel数据转换成多中数据结构(json,xml,html等),在线转换工具效率很不错。
- js-xls:界面有点丑,所以没有仔细尝试其功能。
- htmlparser2:https://github.com/fb55/htmlparser2
- node-htmlparser:https://github.com/tautologistics/node-htmlparser
- Flexigrid:https://github.com/paulopmx/Flexigrid
- posthtml:https://github.com/posthtml/posthtml
- node-xml2json:https://github.com/buglabs/node-xml2json
After having some artificial benchmarks for some time, @AndreasMadsen published his htmlparser-benchmark, which benchmarks HTML parses based on real-world websites.
At the time of writing, the latest versions of all supported parsers show the following performance characteristics on Travis CI (please note that Travis doesn’t guarantee equal conditions for all tests):
`gumbo-parser : 34.9208 ms/file ± 21.4238
html-parser : 24.8224 ms/file ± 15.8703
html5 : 419.597 ms/file ± 264.265
htmlparser : 60.0722 ms/file ± 384.844
htmlparser2-dom: 12.0749 ms/file ± 6.49474
htmlparser2 : 7.49130 ms/file ± 5.74368
hubbub : 30.4980 ms/file ± 16.4682
libxmljs : 14.1338 ms/file ± 18.6541
parse5 : 22.0439 ms/file ± 15.3743
sax : 49.6513 ms/file ± 26.6032`