Java XML与JSON

XML

XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。

特点:一是纯文本,默认使用UTF-8编码,二是可嵌套,适合表示结构化数据。

XML 用途

 

XML 结构

1、声明

声明:说明本XML文档符合XML的哪个版本规范,并且说明本文档的编码格式。对于任何一个XML文档,其声明部分都是固定的格式。如下:

<?xml version="1.0" encoding="UTF-8"?>

 

2.根元素

<books> </books>成对出现,叫做XML文档的根元素。每个XML文件的根元素有且只有一个。必须包含根元素。该元素是所有其他元素的父元素
根元素的特点如下:
1、根元素是一个完全包括文档中其他所有元素的元素。
2、根元素的起始标签要放在所有其他元素的起始标签之前。
3、根元素的结束标签要放在所有其他元素的结束标签之后。
<?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 version="1.0"?>,可以加上可选的编码。下一行描述文档的根元素(像在说:"本文档是一个便签"),接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body),最后一行定义根元素的结尾。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

 

 

 

3.标签

在XML中,用<>括起来的各种标签(Tag)来标记数据,标签需成对使用来界定字符数据。XML文件可以包含任意数量的标签。

 标签对大小写敏感,XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的。必须使用相同的大小写来编写打开标签和关闭标签。


4. 元素

XML文档的主要部分是元素,元素由开始标签、元素内容和结束标签组成。

一个元素可以包含:

  • 其他元素
  • 文本
  • 属性
  • 或混合以上所有...

元素的命名规则如下:

  • 名称中可以包含字符、数字或者其他字符。
  • 名称不能以数字或者标点符号开始。
  • 名称不能以字符xml(或者XML、Xml)开始。
  • 名称中不能包含空格。

最佳命名习惯

使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。

名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。

避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。

避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。

在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。

注:1、XML标签必须成对出现并正确嵌套,如下面的嵌套方式是不正确的。<title><name>XML编程</title></name>
2、元素允许是空元素,如以下元素的写法是允许的:<name> </name>或者<name/>
3、 属性值用双引号包裹

4、XML 元素是可扩展的

5. 属性

在描述图书信息的XML文档中,<book id = "bk101">标签使用id属性描述图书的编号信息。属性定义的语法格式如下:<元素名 属性名 = "属性值">

注:1、一个元素可以有多个属性,它的基本格式为<元素名 属性名 = "属性值" 属性名 = "属性值"/>多个属性之间用空格隔开。
2、属性值不能直接包含< “ &(不建议: ‘ >)等字符
3、属性可以加在任何一个元素的起始标签上,但不能加在结束标签上。

<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 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
XML 元素 vs. 属性

 

6. XML中的特殊字符的处理

在XML中,有时在元素的文本中会出现一些特殊字符(如<、>、'、"、&),而XML文档结构本身就用到了这几个特殊字符,有以下两种办法,可以正确地解析包含特殊字符的内容。

a、转义

对这5个特殊字符进行转义,也就是使用XML文档中的预定义实体代替这些字符,XML中的预定义实体和特殊字符的对应关系如下:

在后面要记得加分号
符号             转义符(预定义实体)
<                      &lt;(less than)
>                      &gt;
"                      &quot;
'                      &apos;
&                      &amp;
如:
<student id="&lt;s1">解析为<student id="<s1">
如:<test>我们上面的标签包含&lt;student&gt;&lt;/student&gt;</test>解析为
<test>我们上面的标签包含<student></student></test>
但是这种方式太麻烦,可读性差。只需告诉浏览器我这是一个普通的文本,不是标签,那怎么去做呢?

b. CDATA节

当元素中出现很多特殊字符时,可以使用CDATA节。CDATA节中的所有字符都会被当做元素字符数据的常量部分,而不是XML标签。定义CDATA节的语法格式如下

   <![CDATA[要显示的字符]]>
如L:
<description>
       <![CDATA[讲解了元素<title>以及</title>的使用]]>
</description>

 

7. XML中的注释

注释的语法格式如下:

<!--注释内容-->

 

8. 格式良好的XML文档

格式良好的XML文档需要遵循如下规则:

1、必须有XML声明语句
2、必须有且仅有一个根元素
3、标签大小写敏感
4、属性值用双引号包含起来
5、标签成对出现
6、元素正确嵌套

 

9. XML编写注意事项

1、所有XML元素都必须有结束标签
2、XML标签对大小写很敏感
3、XML必须正确的嵌套
4、同级标签以缩进对齐
5、元素名称可以包含字母、数字和其他的字符
6、元素名称不能以数字或者标点符号开始比如<5name>就不行
7、元素名称不能包含空格
在<student name>里面,系统会认为空格后面就是属性了,不会认为这两个是一体。

 

10. 推荐命名习惯 

1、见名知意
2、名字尽量比较简短一点<book_title>
3、可以用下划线,但是不要用中横线、不要用点、也不要用冒号。如<book-title> <book.title><book:title>冒号在XML中有特殊的作用。
4、因为数据库跟XML有很大的关系,所以一般数据可怎么命名,XML文件就怎么命名,这两个平着来就可以了。

 

11. XML中的命名空间

命名空间在XML文档中可以用作元素或属性名称的名称集合,它们用来标示来自特定域(标准组织、公司、行业)的名称

 

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<?......?> :表示该行是一条指令
xml :表示该文件是一个xml文件
 version=“1.0” :表示该文件遵循的是xml 1.0标准
encoding=“gb2312“ :表示使用的是gb2312字符集
 standalone=“yes“ :表示该文件未引用其他外部的xml文件

<?xml-stylesheet type="text/css" href="1-3.css"?>
<?......?> :表示该行是一条指令
xml-stylesheet :表示该指令用来设定文档所使用的样式单文件
type=“text/css“:说明使用的样式单为css,如果用xsl样式单,则为type=“text/xsl”
href=“1-3.css“ :设定样式单文件的地址。

 

更多的XML知识,请参考:https://www.runoob.com/xml/xml-namespaces.html

链接:https://www.jianshu.com/p/c5fd6b938c30

 

posted @ 2022-10-12 10:33  云long  阅读(98)  评论(0编辑  收藏  举报