XML的基本概念和Android下的使用
1. XML的基本概念
1. 什么是XML:
1). XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是表示数据,而非显示数据。
2). XML标签没有被预定义,需要用户自行定义标签。
3). XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。
2. 一个简单的XML:
<?xml version="1.0" encoding="UTF-8"?> <中国> <北京> <海淀></海淀> <丰台></丰台> </北京> <广东> <广州></广州> <东莞></东莞> </广东> <湖北> <武汉></武汉> <襄阳></襄阳> </湖北> </中国>
1). XML语言出现的根本目标在于描述上图那种,在现实生活中经常出现的有关系的数据。
2). 在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
3). XML语言是一种通用的数据交换格式。
2. XML的基本语法
一个普通的XML包含了如下几个部分:
1. 文档声明
2. 元素
3. 属性
4. 注释
5. CDATA区 、特殊字符(没研究,用到再补充)
6. 处理指令(processing instruction) (PI)
以下面这个例子为例:
从Android中拿出来的一个manifest.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.expample.test.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
一个普通的XML分为如下几个部分:
1. 文档声明
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。Android默认为2000年发布的XML1.0规范:注意:声明也是一条处理指令
最简单的语法:
<?xml version=“1.0”?>
用encoding属性说明文档所使用的字符编码,Android默认为UTF-8。保存在磁盘上的文件编码要与声明的编码一致。
<?xml version=“1.0” encoding=“UTF-8”?>
解释:保存在磁盘上的文件编码要与声明的编码一致
如果新建一个XML文件,在我们Windows上默认是DBK的编码,这个时候在文件中添加encoding=“UTF-8”,也就是让解析器解析为UTF-8的格式,这是会编码格式不同而解析错误,所以如果添加UTF-8,必须也要将本身文件的编码格式修改为UTF-8
2. 元素
1). XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下两种书写形式:
包含标签主体:<mytag>some content</mytag>
不含标签主体:<mytag/>
2). 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
错误:
<mytag1><mytag2></mytag1></mytag2>
3). 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
同时需要注意:对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
第一段:
<中国><北京/></中国>
第二段:
<中国>\r\n \t<北京/> </中国>
由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。
3. 属性
一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
<mytag name="value"/>
属性值一定要用双引号(")或单引号(')引起来
定义属性必须遵循与标签相同的命名规范
在XML技术中,标签属性所代表的信息,如果没有标签体,也可以被改成用子元素的形式来描述,例如:
<mytag> <name> <firstname></firstnamename> <secondname></secondname> </name>
4. 注释
Xml文件中的注释采用:<!--这是注释-->
注意:
XML声明之前不能有注释
注释不能嵌套,例如:
<!--大段注释
……
<!--局部注释-->
……
-->
Xml的注释与html的注释是一样的.
5. CDATA区 、特殊字符(没去了解,用到在补充)
没去了解,用到在补充
6. 处理指令(processing instruction) (PI)
处理指令,简称PI(Processing Instruction)。
作用:用来指挥软件如何解析XML文档。
语法:必须以“<?”作为开头,以“?>”作为结尾。
常用处理指令:
XML声明:<?xml version=“1.0” encoding=“GB2312”?>
3. XML约束(Schema)
XML约束就是XML框架的设计者用来限定使用者到底可以写一些什么内容,XML才能识别。
例如谷歌就限定了在Android中XML到底可以写一些什么内容。
Android使用的约束就是schema
XML Schema对名称空间支持得非常好。
名词解释:名称空间
就是类似于C++中的命名空间。
在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:
<aplex:书架 xmlns:aplex=“http://www.itcast.cn”> <aplex:书>……</itcast:书> </aplex:书架>
此处使用aplex来指向声明的名称,以便于后面对名称空间的引用。
XML的约束其实也是一个XML文件,只是不以.xml为后缀,而是以.xsd
下面我们来看一个xml的约束文件和其对应的一个xml
book.xsd:
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.aplex.cn" //注意:这里的命名空间为http://www.aplex.cn elementFormDefault="qualified"> <xs:element name='书架' > <xs:complexType> <xs:sequence maxOccurs='unbounded' > <xs:element name='书' > <xs:complexType> <xs:sequence> <xs:element name='书名' type='xs:string' /> <xs:element name='作者' type='xs:string' /> <xs:element name='售价' type='xs:string' /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
上面那个约束对应的xml为book.xml:
<?xml version="1.0" encoding="UTF-8"?> <aplex:书架 xmlns:itcast="http://www.apelx.cn" //这里的http://www.aplex.cn就是上面的命名空间,但是这样写太麻烦,就相当于给他起了一个别名,itcast,这里的xmlns就是XML NameSpace:命名空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://www.itcast.cn book.xsd"> <aplex:书> <aplex:书名>JavaScript网页开发</itcast:书名> <aplex:作者>张孝祥</itcast:作者> <aplex:售价>28.00元</itcast:售价> </aplex:书> </aplex:书架>
4. XML在Android中的使用
在Android开发中,XML有一般是有两个功能
1). 配置:在Android中传统的配置文件是*.properties属性文件(key=value),而XML也常用来做配置文件,它表示的数据则更为丰富。如果只是简单的配置,使用键值对,如果带有层次关系的,则最好使用XML文件
2). 保存数据
Android应用中的manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="sample.android_serialport_api.adapter"> <application //一个应用,不清楚到底算什么,应该算组件? android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" //界面最上面的标题 android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity">//一个activity组件,name表示注册的是哪一个activity,也可以写包的全名,name其实跟id差不多一个意思 <intent-filter> <action android:name="android.intent.action.MAIN" /> //动作:应用程序的主入口,也就是一旦启动,第一个动作就进入main //xxx:就是会在launcher里面生成一个图标,launcher也是一个应用,也就是点击home键会跑出来一堆图标的那个玩意 <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>