最近经常碰到XML,所以今天学习了下,这里分享下笔记
(1)简介及来源:
XML 是可扩展标记语言(Extensible Markup Language)的缩写,被设计用来传输和存储数据,其中的 标记(markup)是关键部分。
可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。创建的文件,或文档实例 由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。SGML 比较复杂,HTML(实际上仅是一组元素集)在识别信息方面不够强大。XML 则是一种易于使用和易于扩展的标记语言。
(2)XML与HTML对比:
首先声明XML 和 HTML 为不同的目的而设计,并且不是 HTML 的替代,理解这一点很重要。对 XML 最好的描述是:XML 是独立于软件和硬件的信息传输工具
①XML 被设计用来传输和存储数据,主要是负责数据的内容;且无预定义标签,所以可以自己创建标签,这个在下面介绍;空格会保留
②HTML 被设计用来显示数据,主要负责数据的展示;且有预定义标签;空格会被裁减成一个
【XML详解:】
1 . 一种很像HTML的标记语言,设计宗旨是传输数据,而不是显示数据。
且标签没有被预定义,需要自行定义标签。被设计为具有自我描述性,是 W3C 的推荐标准(1998.02)
2 . XML 不会做任何事情
也许这有点难以理解,但是 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
下面实例是 Jani 写给 Tove 的便签,存储为 XML:
<note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。
但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
3.可以自己创建标签
上面实例中的标签没有在任何 XML 标准中定义过(比如 <to> 和 <from>)。这些标签是由 XML 文档的创作者发明的。
这是因为 XML 语言没有预定义的标签,而HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等等)。
XML 允许创作者定义自己的标签和自己的文档结构。
4.适用性
XML 是各种应用程序之间进行数据传输的最常用的工具,在 Web 中起到的作用不会亚于一直作为 Web 基石的 HTML
(3)XML用途
①把数据从HTML分离;
②简化数据共享;
③简化数据传输;
④简化平台变更;
⑤增强数据可用性,通过 XML,您的数据可供各种阅读设备使用(掌上计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用;
⑥创建新的互联网语言,比如XHTML,用于描述可用的 Web 服务 的 WSDL和作为手持设备的标记语言的 WAP 和 WML
(4)树结构
XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"
(5)语法
<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
①XML 声明:
如果存在需要放在文档的第一行,如<?xml version="1.0" encoding="utf-8"?>
②关闭标签:
所有的 XML 元素都必须有一个关闭标签(除了声明外,因为声明不是 XML 文档本身的一部分,所以它没有关闭标签)
③对大小写敏感:
必须使用相同的大小写来编写打开标签和关闭标签
<Message>这是错误的</message> <message>这是正确的</message>
④必须被正确嵌套;
⑤属性值必须加引号;
⑥实体引用/实体字符:
在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
如果把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始
在 XML 中,有 5 个预定义的实体引用:
< | < | less than(小于号) |
> | > | greater than(大于号) |
& | & | ampersand(符号--和/与) |
' | ' | apostrophe(撇号/单引号) |
" | " | quotation mark(引号/双引号) |
⑦注释:注释语法与HTML相同,即<!-- -->
⑧保留空格:与HTML裁减空格不同,XML的空格会被保留下来
⑨存储换行:XML 以 LF 存储换行
而在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF);在 Unix 和 Mac OSX 中,使用 LF 来存储新行;在旧的 Mac 系统中,使用 CR 来存储新行
(6)XML元素
①元素构成:
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分,包含文本,属性和其他元素
②元素命名规则:
名称可以包含字母、数字以及其他的字符;不能以数字或者标点符号开始
不能以字母 xml(或者 XML、Xml 等等)开始;不能包含空格
③命名习惯:
名称应具有描述性,使用下划线的名称也很不错:<first_name>、<last_name>;
名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>;
避免 "-" 字符,如果这样进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name;
避免 "." 字符,如果按这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性;
避免 ":" 字符,冒号会被转换为命名空间来使用(稍后介绍)
④可扩展:
XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展
(7)XML属性
①属性VS元素:
<person date="10/01/2008"> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
<person> <date>10/01/2008</date> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>在第一个实例中,sex 是一个属性。在第二个实例中,sex 是一个元素。这两个实例都提供相同的信息。
没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。
我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧
当然也可以使用扩展的data元素:
<person> <date> <day>10</day> <month>01</month> <year>2008</year> </date> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>②避免使用XML属性
因使用属性而引起的一些问题:
属性不能包含多个值(元素可以);属性不能包含树结构(元素可以);属性不容易扩展(为未来的变化)
属性难以阅读和维护等
所以要尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息
不要做这样的蠢事(这不是 XML 应该被使用的方式):
<note day="10" month="01" year="2008" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!"> </note>
(8)针对元数据的 XML 属性
有时候会向元素分配 ID 引用,这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的
【注意】:id 属性仅仅是一个标识符,用于标识不同的便签,它并不是标签数据的组成部分。在此极力传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素
(9)XML验证
①通过 DTD 验证的XML是"合法"的 XML,DTD 的目的是定义 XML 文档的结构,它使用一系列合法的元素来定义文档结构
具体我在下一篇文章里做了总结
②XML Schema
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema(架构)
(10)XML验证器
①使用XML验证器来对XML文件进行语法检查
XML文档里的错误会终止您的 XML 应用程序
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性
②还可以根据 DTD 来验证 XML,需要把 DOCTYPE 声明(带有 DTD)添加到XML中 <xml> 元素后
(11)查看XML文件
由于 XML 标签由 XML 文档的作者"发明",浏览器无法确定像 <table> 这样一个标签究竟描述一个 HTML 表格还是一个餐桌。
在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。
例如:一个简单的食物菜单-------这是一个来自餐馆的早餐菜单,存储为 XML 数据
(12)样式格式化
关于XML样式格式化有两种方式:CSS和XSLT,下面分开讲解
①使用 CSS 显示您的 XML(不常用,W3C 推荐使用 XSLT)
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/css" href="cd_catalog.css"?> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD>
②XSLT
XSLT(eXtensible可扩展 Stylesheet样式表 Language Transformations语言转换),在浏览器显示 XML 文件之前,先把它转换为 HTML
可以在浏览器完成转换,但是不同浏览器可能产生不同结果,所以也可以在服务器进行转换
(13)跨域访问
出于安全方面的原因,现代的浏览器不允许跨域的访问。
这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上
(14)加载XML文件
如需从 XML 文件("note.xml")的 <to> 元素中提取文本 "Tove",语法是:
getElementsByTagName("to")[0].childNodes[0].nodeValue
请注意,即使 XML 文件只包含一个 <to> 元素,您仍然必须指定数组索引 [0]。这是因为 getElementsByTagName() 方法返回一个数组
(15)XML应用实例
在 HTML div 元素中显示第一个 CD
下面的实例从第一个 CD 元素中获取 XML 数据,然后在 id="showCD" 的 HTML 元素中显示数据
displayCD() 函数在页面加载时调用:
<!DOCTYPE html> <html> <head> <script> if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else{// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","cd_catalog.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; x=xmlDoc.getElementsByTagName("CD"); i=0; function displayCD(){ artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue); txt="Artist: " + artist + "<br>Title: " + title + "<br>Year: "+ year; document.getElementById("showCD").innerHTML=txt; } </script> </head> <body onload="displayCD()"> <div id='showCD'></div> </body> </html>
【XML进阶】
(1) 命名冲突
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突
①使用前缀来避免命名冲突,例如
<h:table> <h:td>Apples</h:td> </h:table> 与 <f:table> <f:name>African Coffee Table</f:name> </f:table>
②XML 命名空间 - xmlns 属性
当在 XML 中使用前缀时,一个所谓的用于前缀的命名空间必须被定义,命名空间是在元素的开始标签的 xmlns 属性中定义
1 . 命名空间声明语法:xmlns:前缀="URI"
<root> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:td>Apples</h:td> </h:table> <f:table xmlns:f="http://www.w3cschool.cc/furniture"> <f:name>African Coffee Table</f:name> </f:table> </root>
2. 默认的命名空间
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。它的语法如下:
xmlns="namespaceURI"
这个 XML 携带 HTML 表格的信息:
<table xmlns="http://www.w3.org/TR/html4/"> <td>Apples</td> </table>
3 . xsl命名空间标识xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
XSLT 是一种用于把 XML 文档转换为其他格式的 XML 语言,比如 HTML。
在下面的 XSLT 文档中,您可以看到,大多数的标签是 HTML 标签。
非 HTML 的标签都有前缀 xsl,并由此命名空间标识:xmlns:xsl="http://www.w3.org/1999/XSL/Transform":
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
(2)XML的CDATA
CDATA 是不应该由 XML 解析器解析的文本数据
像 "<" 和 "&" 字符在 XML 元素中都是非法的,而某些文本,比如JavaScript代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA,这样CDATA 部分中的所有内容都会被解析器忽略
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<script> <![CDATA[ function matchwo(a,b){ if (a < b && a < 0) then{ return 1; }else{ return 0; } } ]]> </script>
(3)服务器上的 XML
XML 文件是类似 HTML 文件的纯文本文件,能够通过标准的 Web 服务器轻松地存储和生成
【存储】:在服务器上存储 XML 文件
XML 文件在 Internet 服务器上进行存储的方式与 HTML 文件完全相同
用适当的文件名,比如 "note.xml",在 Web 服务器上保存这个文件
【生成】
通过ASP,PHP,数据库都可以
在服务器上通过 XSLT 转换 XML,例如ASP代码在服务器上把 XML 文件转换为 XHTML
(4)XML相关技术
①可扩展超文本标记语言XHTML
②DTD (文档类型定义),定义 XML 文档中的合法元素的标准
③SVG (可伸缩矢量图形) ,定义 XML 格式的图形
【【这里分享个不错的技术文章,简单易懂】】
XML即可扩展标记语言(eXtensible Markup Language)。标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。
上面这段是对XML的一个基本定义,一个被广泛接受的说明。简单说,XML就是一种数据的描述语言,虽然它是语言,但是通常情况下,它并不具备常见语言的基本功能——被计算机识别并运行。只有依靠另一种语言,来解释它,使它达到你想要的效果或被计算机所接受。
假如你是刚接触XML的新手,那么可能并无法从定义上是了解XML是什么。也许,你可以换个角度来认识XML是什么;从应用面来认识XML,从XML可以做些什么来认识它,这应该能比那更空洞的定义对你更有帮助。
XML应用面主要分为两种类型,文档型和数据型。下面介绍一下几种常见的XML应用:
1、自定义XML+XSLT=>HTML,最常见的文档型应用之一。XML存放整个文档的XML数据,然后XSLT将XML转换、解析,结合XSLT中的HTML标签,最终成为HTML,显示在浏览器上。典型的例子就是CSDN上的帖子。
2、XML作为微型数据库,这是最常见的数据型应用之一。我们利用相关的XML API(MSXML DOM、JAVA DOM等)对XML进行存取和查询。留言板的实现中,就经常可以看到用XML作为数据库。同时,这里要告诉一些新人,数据库和数据库系统,这两个概念是不同的。这里顺便提一下XML对数据库系统的影响。在新版本的传统数据库系统中,XML成为了一种数据类型。和“传统”相对的就是一种新形态的数据库,完全以XML相关技术为基础的数据库系统。目前比较知名的eXist。
3、作为信息传递的载体。为什么说是载体呢?因为这些应用虽然还是以XML为基本形态,但是都已经发展出具有特定意义的格式形态。最典型的就是WEB SERVICE,将数据包装成XML来传递,但是这里的XML已经有了特定的规格,即SOAP。不过这里还不得不说AJAX,AJAX的应用中,相信也有一部分的应用是以自定义XML为数据,不过没有成为工业标准,这里不做详述。
4、应用程序的配置信息数据。最典型的就是J2EE配置WEB服务器时用的web.XML。这个应用估计是很容易理解的了。我们只要将需要的数据存入XML,然后在我们的应用程序运行载入,根据不同的数据,做相应的操作。这里其实和应用2,有点类似,所不同的在于,数据库中的数据变化是个常态,而配置信息往往是较为静态,缺少变化的。
5、其他一些文档的XML格式。如WORD、EXCEL等。
6、保存数据间的映射关系。如Hibernate。
这几种常见应用中,我们还可以根据其应用广泛程度,分为:自定义XML和特定意义XML。在1和2就是属于自定义XML的范畴;3至6则属于特定意义XML,或者说是XML的延伸。
这里介绍的6种应用,基本涵盖了XML的主要用途。总之,XML是一种抽象的语言,它不如传统的程序语言那么具体。要深入的认识它,应该先从它的应用入手,选择一种你需要的用途,然后再学习如何使用。
总结:
①UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的默认编码;
②极力传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素;
相关推荐
eclipse mars版本自带maven插件,我们就不需要安装maven,但是本地仓库默认放在C盘,如果要想将本地仓库转移到其他的盘,就需要setting.xml,下载后只需修改本地仓库的配置就好了
在这段配置中,首先包含了默认的WebWork配置文件`webwork-default.xml`,接着定义了一个名为`default`的包,并在该包下配置了一个登录动作`login`。当用户访问`login.action`时,系统会调用`com.LoginAction`类进行...
XML配置是Spring最早支持的配置方式,通过定义XML文件来描述Bean及其依赖关系。例如: ```xml ``` ##### 3.2 注解配置 随着Java技术的发展,Spring也开始支持注解配置方式,这种方式更加简洁、直观。常用注解...
Struts2的验证功能非常强大,支持多种验证方式,包括注解验证、XML配置验证等。 - **验证规则配置**: - **validate方法**:通过在Action类中定义`validate()`方法来自定义验证逻辑。 - **自动转换**:在验证过程...
**hibernate课程笔录** 本课程主要涵盖了Hibernate框架的核心概念和使用方法,它是一个流行的Java ORM(对象关系映射)解决方案,旨在简化数据库操作,让开发者能够更专注于业务逻辑而不是底层SQL。Hibernate通过...
例如,在`core-site.xml`文件中,`fs.default.name`属性定义了默认的文件系统,它应指向NameNode的主机名或内网虚拟IP对应的主机名。如果设置了双机热备,此处需填写热备Namenode的内网虚拟IP对应的主机名,以确保...
系统的功能包括:·网站系统配置·栏目管理·专题管理·CSS文件管理·JS文件管理·XML文件管理·导航管理·留言管理·上传管理·一级页模板管理·内容页模板管理·自定义模板管理·文章变量模板管理·留言变量模板...
- **pom.xml**: Maven项目的配置文件,定义了项目依赖,如NLP库的版本。 - **README.md**: 提供项目简介、安装指南和使用说明。 通过这个项目,开发者可以学习到如何在实际应用中整合和应用NLP技术,以及如何使用...
安迅网站内容管理系统1.0测试版是一套专门方便用于各类中小企业网站建设的网站管理系统。该系统采用ASP Access开发,由安迅建站发布。...·XML文件管理 ·留言管理 更多功能将在后续版本推出,敬请期待。
5. 结果导出:最后,用户可以将校勘结果以各种格式(如HTML、CSV或XML)导出,以便进一步分析或与其他学者分享。 CollateOS的使用不仅限于斯拉夫手稿,它还可以扩展到其他语言和文化背景的历史文献。通过对原始资料...
**标题:“Hibernate课程的总结”** 在学习Hibernate框架的过程中,我们深入探讨了它在Java企业级应用中的...通过阅读提供的“hibernate课堂笔录_0906.txt”,可以进一步巩固这些知识,并解决实际开发中遇到的问题。
除非原始字幕中包含字符名称,否则这将无法帮助您获得“完整”笔录的字符名称。 那只是可用的数据。 如果您找到一种处理视频数据和ML的好方法,我很乐意看到它。 确保使用对通用用途有意义的文件名保存.csv 。 ...
我有一个旧的,已停产的帐户,里面有五年的笔录,其中一些很有趣,而另一些却令人难忘。 不幸的是,Campfire目前不具有导出功能。 相反,它提供了各个成绩单的页面。 我想要一个脚本,使用Campfire API导出过去五...
从会议记录中检索动作点使用基于变压器的XLNet预训练模型和AMI会议语料库对会议记录中的对话语音进行分类,从而对动作点进行检索 用例:将从会议笔录和提取的点中提取动作点的内容汇总并发送给所有参与者。...
Mybatis则是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解配置将SQL语句与Java代码绑定。Mybatis强调的是POJO(Plain Old Java Object)和SQL的直接映射,这降低了数据访问的复杂性。通过Mybatis,...