XML
最近在使用Web Service服务,需要使用XML进行数据交换,涉及到XML的解析问题,遂做以记录。
文章引用了菜鸟教程、W3CSchool、百度百科、WIKI百科,综合个人的理解,对以上内容进行了整理,精简。添加了个人的想法等。目录
XML基础←戳我跳转
- XML概述
- XML用途
- XML树结构
- XML语法
- XML元素
- XML属性
- 验证
- XSLT
XML JavaScript←戳我跳转
- XML HttpRequest对象
- XML 解析器
- DOM
- XML to Html
- XML 应用程序
XML 高级←戳我跳转
- XML 命名空间(Namespace)
- CDATA
- XML编码
- XML 服务器
- XML DOM高级
- XML 注意事项
- XML 数据存储
- XML 技术
- 案例
- DTD和Schema
XML基础←戳我返回目录
一、XML概述
- XML 指可扩展标记语言(Extensible Markup Language)
- XML被设计用来传输和存储数据,而不是像Html那样显示数据
- XML不同于HTML的预定义标签,需要用户自行定义标签
- XML是W3C的推荐标准,被设计为具有自我描述性
二、XML用途
- 将数据与展示数据的模板如(HTML、JSP……)等分离
- 简化数据的共享方式。XML使用纯文本存储数据,使用了独立与软硬件的存储方法,创建一份XML即可供不同的应用程序共享。
- 简化数据传输。XML可方便地在异构系统之间传输
…… - 创建新的互联网语言。如:WSDL(Web Service Description Language),Web 服务描述语言。
三、XML树结构
举例:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child>First</child>
<name>Jack</name>
<age>12</age>
<sex>boy</sex>
<child2>Second</child2>
<name>Juliet</name>
<age>12</age>
<sex>girl</sex>
</root>
上文中,第一行<?xml …… ?>
是XML的版本定义和编码格式。
<root>
是根节点,其包含两个元素<child>
和<child2>
,这两个元素又分别包含 了<name>
、<age>
、<sex>
三个子元素
四、语法
- XML的可选声明,如果存在请添加至文档的首行
- XML文档必须有根元素
- 所有元素必须有关闭标签
- 元素标签对大小写敏感
- 元素标签需要被正确地嵌套
- 属性值需要使用双引号
如:<node data="2019年某月某日"></node>
- 注释
<!-- 注释内容-->
- XML中的空格会被保留,且多个空格会被合并,保存为1个
- XML以LF存储换行。
在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。 实体引用
XML中的部分字符在XML有特殊的含义,如:<
,会被解析器当作一个元素的开始。为避免这种类型的错误,请使用实体引用代替。XML中预定义的5个实体引用:
lt; < 小于 gt; > 大于 amp; & 与关系、和符号 apos; ’ 单引号 quot; “ 双引号 Tips: 在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
五、元素
XML元素是指从开始元素到结束标签之间的内容,包含起始、结束标签本身,元素可嵌套其他子元素,且元素可以拥有属性,元素是可扩展的,可以自由添加同级、子级元素等。
元素命名规则:
- 无保留字
- 名称可以含字母、数字以及其他的字符
- 不能以数字或者标点符号开始
- 不能以字符 “xml”(或者 XML、Xml)开始
- 不能包含空格
- 不推荐使用
_
、-
、.
、:
等符号,建议使用小驼峰、大驼峰规则使用英文单词命名
六、属性
XML中的元素可以在开始标签中添加属性(Attribute),为XML元素提供额外的信息。
如:<root id="xxxx" type="xxx">some text</root>
- 属性值必须加引号(单、双引号)
Tips:如果属性值本身包含双引号,可以在外层使用单引号<root id="xxx" type='aaa"bb"ccc'></root>
或者使用上文提到的实体引用<root id="xxx" type="aaa"bb"cc"></root>
使用属性还是元素存储数据?
看下面的例子:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
上文中,前者使用sex属性存储信息,后者使用子元素存储信息。两种方式都可以正常解析,但是基于一种行业规范,如果要存储的文本看起来就是数据,请尽量使用元素存储。
属性可能会引起一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
元数据应尽量使用属性存储:
一些元素常常使用一个ID进行标识,往往可以使用UUID,用来标识、索引XML文件中的元素
<root>
<element id="001">
<name>xxx</name>
<age>xxx</age>
</element>
<element id="002">
<name>xx</name>
<age>xx</age>
</element>
</root>
上面的 ID 仅仅是一个标识符,用于标识不同的元素标签,并不是标签数据的组成部分。
因此:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
七、XML验证
拥有正确语法的 XML 被称为“形式良好”的 XML,语法请参照第四节。
通过 DTD 验证的 XML 是“合法”的 XML。
八、XSLT
XSLT(Extensible Stylesheet Language Transformations)可扩展样式表转化语言,XSLT 是首选的 XML 样式表语言,比CSS更加完善。
XML JavaScript←戳我返回目录
XML高级←戳我返回目录
更新中……
还没有评论,来说两句吧...