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>

 

posted on 2017-11-08 19:10  maogefff  阅读(721)  评论(0编辑  收藏  举报

导航