XML文件结构和基本语法
- XML文件的结构性内容:节点关系,属性内容等。
- XML最基本的单位:元素,它由开始标记、属性和结束标记组成。
XML文件示例
例1:使用‘记事本’创建xml文件
在‘记事本’中输入以下内容:
<?xml version="1.0" encoding="gb2312" ?>
<参考资料>
<书籍>
<名称>xml入门精解</名称>
<作者>张三</作者>
<价格 货币单位="人民币">20.00</价格>
</书籍>
<书籍>
<名称>xml语法</名称>
<!--此书即将出版-->
<作者>李四</作者>
<价格 货币单位="人民币">18.00</价格>
</书籍>
</参考资料>
编辑好后保存以后缀名为’.xml’的文件。此文件可以分为文件序言(prolog)和文件主体两个部分。
- 文件序言:对应此文件的第一行,该行是一个xml文件必须要声明的内容,并且必须位于xml文件的第一行,它主要是告诉xml解析器如何工作。
- version表明此xml文件所用的标准的版本号,此内容必须存在。
- encoding表明此xml文件中所使用的字符类型,可以省略。在你省略此声明的时候,后面的字符码必须是unicode字符码(建议不要省略)。
- 文件主体:除去文件序言,其余部分都属于文件主体,xml文件的内容信息存放在此。文件主体是由开始的**<参考资料>和结束的</参考资料>控制标记组成,这个元素称为xml文件的“根元素”;<书籍>是作为直属于根元素下面的“子元素”;在<书籍>下面又有<名称>、<作者>、<价格>等元素。<货币单位>是<价格>元素中的一个“属性”,“人民币”**则是“属性值”。
- 注释:
<!--此书即将出版-->
这一句同html一样,为注释。在xml文件里,注释部分是存放在<!--存放内容-->
中。
- 注释:
同html一样,xml文件也是由一系列的标记组成,不过,xml文件中的标记是我们自定义的标记,具有明确的含义,我们可以对标记中的内容的含义作出说明。
XML文件的语法
在讲语法之前,我们必须要了解一个重要的概念,就是xml解析器(xml parse)。
xml解析器
解析器的主要功能就是检查xml文件是否有结构上的错误,剥离xml文件中的标记,读出正确的内容,以交给下一步的应用程序处理。xml是一种用来结构化文件信息的标记语言,xml规范中对于如何标记文件的结构性有一个详细的法则,解析器就是根据这些法则写出来的软件(多用java写成)。
well-formed的xml文件
我们知道,xml必须是well-formed的,才能够被解析器正确地解析出来,显示在浏览器中。那么什么是well-formed的xml文件呢?主要有下面几个准则,我们在创建xml文件的时候,必须满足它们。
-
xml文件的第一行必须是声明该文件是xml文件以及它所使用的xml规范版本。在文件的前面不能够有其它元素或者注释。
-
在xml文件中有且只能有一个根元素。我们的第一个例子中,<参考资料>… </参考资料>就是此xml文件的根元素。xml文件中,用的大多都是自定义的标记。
-
在xml文件中的标记必须正确地关闭,也就是说,在xml文件中,控制标记必 须有与之对应的结束标记。如:<名称>标记必须有对应的</名称>结束标记,不像html,某些标记的结束标记可有可无。如果在xml文件中遇到自成一个单元的标记,就是类似于html 中的
的这些没有结束标记的时候,xml把它称为“空元素”,必须用这样的写法:<空元素名/>,如果元素中含有属性时写法则为:<空元素 名 属性名=“属性值”/>。
-
标记之间不得交叉。在以前的html文件中,可以这样写:
<b><h>xxxxxxx</b></h>,<b>和<h>
标记之间有相互重叠的区域,而在xml中,是严格禁止这样标记交错的写法,标记必须以规则性的次序来出现。 -
属性值必须要用“ ”号括起来。如第一个例子中的“1.0”、“gb2312”、“人民币”。都是用“ ”号括起来了的,不能漏掉。
-
控制标记、指令和属性名称等英文要区分大小写。与html不同的是,在html中, 类似和的标记含义是一样的,而在xml中,类似、或这样的标记是不同的。
-
我们知道,在html文件中,如果我们要浏览器原封不动地将我们所输入的东西显示出来,可以将这些东西放到
<pre></pre>
或者<xmp> </xmp>
标记中间。这对于我们创建html教学的网页是必不可少的,因为网页中要显示html的源代码。而在xml中,要实现这样的功能,就必须使用 cdata标记。在cdata标记中的信息被解析器原封不动地传给应用程序,并且不解析该段信息中的任何控制标记。cdata区域是由:“<! [cdata[”为开始标记,以“]]>”为结束标记。例如:例2中的源码,除了“<![cdata[”和“]]>”符号,其余的内容解析器将原封不动地 交给下游的应用程序,即使cdata区域中的开始和结尾的空白以及换行字符等,都同样会被转交(注意cdata是大写的字符)。
xml具体使用注意事项
-
xml的声明
<?xml version="1.0" standalone="yes" encoding="UTF-8”?>
这是一个XML处理指令。处理指令以 **<?**开始,以**?>结束。<?**后的第一个单词是指令名,如xml, 代表XML声明。
version, standalone, encoding 是三个特性,特性是由等号分开的名称-数值对,等号左边是特性名称,等号右边是特性的值,用引号引起来。几点解释:
- version: 说明这个文档符合1.0规范
- standalone: 说明文档在这一个文件里还是需要从外部导入, standalone 的值设为yes 说明所有的文档都在这一文件里完成
- encoding: 指文档字符编码
-
xml根元素定义
XML文档的树形结构要求必须有一个根元素。根元素的起始标记要放在所有其它元素起始标记之前,根元素的结束标记根放在其它所有元素的结束标记之后,如
<?xml version="1.0" standalone="yes" encoding="UTF-8”?> <Settings> <Person>Zhang San</Person> </Settings>
-
xml元素
元素的基本结构由 开始标记,数据内容,结束标记组成,如
<Person> <Name>Zhang San</Name> <Sex>Male</Sex> </Person>
需要注意的是:
- 元素标记区分大小写, 与 是两个不同的标记
- 结束标记必须有反斜杠,如
XML元素标记命名规则如下:
- 名字中可以包含字母,数字及其它字母
- 名字不能以数字或下划线开头
- 名字不能用xml开头
- 名字中不能包含空格和冒号
-
xml中的注释
XML中注释如下:
<!-- this is comment -->
需要注意的是:- 注释中不要出现“–”或“-”
- 注释不要放在标记中
- 注释不能嵌套
-
PI (Processing Instruction)
PI 指 Processing Instruction, 处理指令。PI以“<?”开头,以“?>”结束,用来给下游的文档传递信息。
<?xml:stylesheet href="core.css" type="text/css" ?>
例子表明这个XML文档用core.css控制显示。 -
PCDATA
PCDATA: specifies that an element will contain parsed character data.
举例说明PCDATA的用法, 其中movies.xml 存储电影内容数据,movies.dtd对movies.xml进行验证。示例文件(movies.dtd)
<?xml version="1.0" encoding="GB2312"?> <!ELEMENT movies (id, name, brief, time)> <!ATTLIST movies type CDATA #REQUIRED> <!ELEMENT id (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT brief (#PCDATA)> <!ELEMENT time (#PCDATA)>
id, name, brief, time只能包含非标记文本(不能有自己的子元素)。
XML文件如下所示(movies.xml):
<?xml version="1.0" encoding="GB2312"?> <!DOCTYPE movies SYSTEM "movies.dtd"> <movies type="动作片"> <id>1</id> <name>致命摇篮</name> <brief>李连杰最新力作</brief> <time>2003</time> </movies>
-
CDATA
CDATA用于需要把整段文本解释成纯字符数据而不是标记的情况。当一些文本中包含很多“<”,“>”,“&”,“””等字符而非标记时,CDATA会非常有用。
<Example> <![CDATA[ <Person> <Name>ZhangSan</Name> <Sex>Male</Sex> </Person> ]]> </Example>
-
Entities(实体)
Entities(实体)是XML的存储单元,一个实体可以是字符串,文件,数据库记录等。实体的用处主要是为了避免在文档中重复输入,我们可以为一个文档定义一个实体名,然后在文档里引用实体名来代替这个文档,XML解析文档时,实体名会被替换成相应的文档。
XML为五个字符定义了实体名:
实体 字符 < < > > & & " “ ' ‘ 定义并引用实体的示例:
<!DOCTYPE example [ <!ENTITY intro "Here is some comment for entity of XML"> ]> <example> <hello>&intro;</hello> </example>
-
DOCTYPE
“<!DOCTYPE[]>”紧随XML声明,包括所有实体的声明,如下所示:
<!DOCTYPE example [ declare your entities here… ]> <example> Body of document… </example>