XML学习笔记了解一下

简介: 前言: XML Schema 是基于 XML 的 DTD 替代者。json现在也是用来替代XML了 这是我所了解的 那请问还需要学XML吗? 也许毕业了工作了,遇到的项目是以前的 ,需要XML那怎么办? 个人觉得还是有必要的,毕竟是基础,虽然是过时了的技术,但还是有必要掌握一下的,而且花费的时间也不多,大概2天。

前言:

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 标签中的纯粹的信息。
我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

xml文件保存格式就是.xml

举个栗子:

<note>
<to>codingCoge</to>
<from>didi</from>
<heading>Hello</heading>
<body>i think your are cool</body>
</note>
<to><from>都是自定义的

标签意义:
能够读懂 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 中,一些字符拥有特殊的意义。
对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。
如"<"要用<来代替 "<" 字符
对这些特殊字符进行转义。转义之后的字符就叫转义字节。
实体引用:

&lt;    <    小于
&gt;    >    大于
&amp;    &    和号
&apos;    '    单引号
&quot;    "    引号

XML 中的注释


<!-- 注释 --> 

在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个:

HTML:    Hello           my name is David.
输出:    Hello my name is David.

XML 命名规则
XML 元素必须遵循以下命名规则:

名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词。

XML 元素是可扩展的
你可以随时修改里面的内容 可以添加了一些额外的信息
可以经常在不中断应用程序的情况进行扩展,而不报错

XML 属性
属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要

<file type="gif">computer.gif</file>

注意:XML 属性必须加引号
属性值必须被引号包围,不过单引号双引号均可使用。

注释:如果属性值本身包含双引号,那么有必要使用单引号包围它
也可以使用使用实体引用

XML 元素 vs. 属性
请看这些例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

那如何选择使用子元素还是属性呢?
在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那就使用子元素

随便看个栗子:

<note>
<date>
  <day>08</day>
  <month>08</month>
  <year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

总结:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

避免:

<note day="08" month="08" year="2008"
to="George" from="John" heading="Reminder" 
body="Don't forget the meeting!">
</note>

ID 仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。

 <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  

xml乱码问题:
这里写图片描述
得保持编码格式一样
比如 电脑文件文本编码过程默认是GBK格式
而浏览器是解析器,解码过程默认是utf-8格式
只要编码格式一致就行
有两个方法:

 1. 修改编码格式  ,保存以utf-8的格式即可
  2. 文档声明:<?xml version="1.0" encoding="utf-8"?>

version="1.0"表示版本号 encoding="utf-8"表示解码格式
记住是写在xml上面

最好用utf-8
还有 编写xml最好使用工具 不要使用记事本 ,因为工具 保存的时候会自动转换成你的encoding格式 不存在乱码问题 所有 XML 文档中的文本均会被解析器解析。

CDATA块

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。里面的内容原样输出
CDATA 部分由 "" 开始,由 "" 结束:

举一个栗子:

<body>
<script>
&lt;sdf&gt;哈哈&lt;/sdf&gt;
</script>
<script>
<![CDATA[
<sdf>哈哈</sdf>
]]>
</script>
</body>

效果图:
这里写图片描述

还有处理指令


处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。

作用是 告诉xml解析式如何解析xml文档的


比如告诉xml文档应用哪些css文件  

但是现在根本用不到 所以 这些样式显示交给html就行
xml还是老老实实负责数据内容

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解析

        
        DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中  
        构建一颗Document的对象树,通过Document对象,得到树上的节点对象,  
        通过节点对象访问(操作)到xml文档的内容。

可以看一下图片了解一下:(图片来自于黑马)
这里写图片描述

Dom4j工具(原理:DOM解析,非官方,不在JDK需要导包)
现在最好用解析器
所以 我也学的是这一个
可以看我下一篇博客
Dom4j工具--XML的DOM解析

目录
相关文章
|
8月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
37 0
|
8月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作1
41 0
|
8月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
39 0
|
8月前
|
XML 数据格式
java202304java学习笔记第六十七天-ssm-动态sql-web中xml配置
java202304java学习笔记第六十七天-ssm-动态sql-web中xml配置
41 0
|
8月前
|
XML 数据格式
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-知识要点
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-知识要点
38 0
|
8月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作2
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作2
50 0
|
8月前
|
XML 数据格式
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-快速入门2
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-快速入门2
39 0
|
8月前
|
XML 数据格式
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-快速入门1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-快速入门1
46 0
|
11月前
|
XML 数据格式
java202304java学习笔记第五十五天员工管理-idea 报错javax/xml/bind/DatatypeConverter
java202304java学习笔记第五十五天员工管理-idea 报错javax/xml/bind/DatatypeConverter
78 0
|
11月前
|
XML 数据格式
java202303java学习笔记第四十七天-请求-基础操作-XML映射文件3
java202303java学习笔记第四十七天-请求-基础操作-XML映射文件3
55 0