json的出现 是用来替代XML的
原因:
XML相比JSON最大的区别是充满了冗余信息。多数时候我们不需要冗余信息,
但是一旦需要的时候没有就是不行。这就是XML与JSON最大的区别。
为什么很多人反对使用XML,因为多数时候不需要冗余信息。
但是:
json的存在是典型的20%功能解决80%需求。
为什么不要xml?
因为里面80%的功能你不需要,等你需要的时候你就明白,这事只能xml干,json不行。
这是我所了解的 那请问还需要学XML吗?
也许毕业了工作了,遇到的项目是以前的 ,需要XML那怎么办?
而且现在xml还不至于完全被替代,何来不学之说。
个人觉得还是有必要的,毕竟是基础,虽然是过时了的技术,但还是有必要掌握一下的,而且花费的时间也不多,大概4天。
贪多嚼不烂,但也别怕走弯路。
脚踏实地吧 骚年
开始学习XML啦
学习一门新技术,我们得想三个问题:
XML是什么?
XML怎么使用?
XML运用场景?
先来解决第一个问题:XML是什么?
XML 是可扩展标记语言
其设计宗旨是传输数据,而非显示数据 其焦点是数据的内容
XML运用场景:
1. tomcat
2. struts Hibernate spring (三大框架)
3. 作为软件的配置文件
4. 作为数据的载体(存储数据,小型的“数据库”)
学习之前 我想大家都知道HTML,XHTML吧
来区分以下三者:
XML:被设计用来传输和存储数据。
HTML 被设计用来显示数据。 设计用来显示数据,其焦点是数据的外观
XHTML:就是符合 XML标准的改进型 HTML
总结:HTML 旨在显示信息,而 XML 旨在传输信息。别搞错了
学习XML前最好对以下内容有基本的了解
HTML / XHTML
JavaScript
重点:
XML标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是没有行为,是不作为的。
意思就是 标签 你可以自己选择如何定义
而且 它只是一个数据并不能做任何事情
仅仅是包装 XML 标签中的纯粹的信息。
我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
举个栗子:
<note>
<to>codingCogeto>
<from>didifrom>
<heading>Helloheading>
<body>i think your are coolbody>
note>
都是自定义的
标签意义:
能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。
特点:XML 允许创作者定义自己的标签和自己的文档结构。
重要:XML 是独立于软件和硬件的信息传输工具。
XML特点:
1. XML 把数据从 HTML 分离
通过使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容。
2. XML 纯文本格式存储
让创建不同应用程序可以共享的数据变得更加容易
简化数据传输等等
XML 文档形成一种树结构 一定要有根节点
<root>
<child>
<subchild>.....subchild>
child>
root>
不仅可以自定义标签 还可以自定义属性
注意:
所有 XML 元素都须有关闭标签
XML 文档必须有根元素 而且 一个xml文档中有且仅有一个根元素
XML 的属性值须加引号
XML 必须正确地嵌套
XML 标签对大小写敏感
XML 可以空标签
XML 标签中间不能有空格
XML 不能以数字开头 而下划线_可以
一个标签内可以有多个属性 ,但不可以有重复属性
XML 标签对大小写敏感
。在 XML 中,标签 与标签 是不同的。
必须使用相同的大小写来编写打开标签和关闭标签。
在 XML 中,一些字符拥有特殊的意义。
对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。
如”<”要用<来代替 “<” 字符
对这些特殊字符进行转义。转义之后的字符就叫转义字节。
实体引用:
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
XML 中的注释
在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个:
HTML: Hello my name is David.
输出: Hello my name is David.
XML 命名规则
XML 元素必须遵循以下命名规则:
名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词。
XML 元素是可扩展的
你可以随时修改里面的内容 可以添加了一些额外的信息
可以经常在不中断应用程序的情况进行扩展,而不报错
XML 属性
属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要
computer.gif
注意:XML 属性必须加引号
属性值必须被引号包围,不过单引号
和双引号
均可使用。
注释:如果属性值本身包含双引号,那么有必要使用单引号包围它
也可以使用使用实体引用
XML 元素 vs. 属性
请看这些例子:
<person sex="female">
<firstname>Annafirstname>
<lastname>Smithlastname>
person>
<person>
<sex>femalesex>
<firstname>Annafirstname>
<lastname>Smithlastname>
person>
在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。
那如何选择使用子元素还是属性呢?
在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那就使用子元素
随便看个栗子:
<note>
<date>
<day>08day>
<month>08month>
<year>2008year>
date>
<to>Georgeto>
<from>Johnfrom>
<heading>Reminderheading>
<body>Don't forget the meeting!body>
note>
因使用属性而引起的一些问题:
属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
避免:
day="08" month="08" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
ID 仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
<note id="501">
<to>Georgeto>
<from>Johnfrom>
<heading>Reminderheading>
<body>Don't forget the meeting!body>
note>
xml乱码问题:
得保持编码格式一样
比如 电脑文件文本编码过程默认是GBK格式
而浏览器是解析器,解码过程默认是utf-8格式
只要编码格式一致就行
有两个方法:
1. 修改编码格式 ,保存以utf-8的格式即可
2. 文档声明:
version=”1.0”表示版本号 encoding=”utf-8”表示解码格式
记住是写在xml上面
最好用utf-8
还有 编写xml最好使用工具 不要使用记事本 ,因为工具 保存的时候会自动转换成你的encoding格式 不存在乱码问题 所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。里面的内容原样输出
CDATA 部分由 “
<body>
<script>
<sdf>哈哈</sdf>
script>
<script>
<sdf>哈哈sdf>
]]>
script>
body>
还有处理指令
处理指令必须以“”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
作用是 告诉xml解析式如何解析xml文档的
比如告诉xml文档应用哪些css文件
但是现在根本用不到 所以 这些样式显示交给html就行
xml还是老老实实负责数据内容
使用程序读取xml文件的内容。这叫做xml解析
XML解析方式(原理不同)分为两种
1. DOM 解析
2. SAX解析
XML解析工具
DOM解析原理:
1)JAXP (oracle-Sun公司官方)
2)JDOM工具(非官方)
3)Dom4J工具(非官方)
三大框架(默认读取xml的工具就是Dom4j)
.......
SAX解析原理:
1)Sax解析工具(oracle-sun公司官方)
DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中
构建一颗Document的对象树,通过Document对象,得到树上的节点对象,
通过节点对象访问(操作)到xml文档的内容。
Dom4j工具(原理:DOM解析,非官方,不在JDK需要导包)
现在最好用解析器
所以 我也学的是这一个
可以看我下一篇博客
Dom4j工具–XML的DOM解析
XML约束要求:大家能够看懂约束内容,根据约束内容写出符合规则的xml文件。
XML约束技术
DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本高(名称空间)
提一嘴:
你们有没有遇到这种情况 ,xml文件在eclipse中打开是这种情况?
只要点击左下角的Source就可以了。重点内容