xml文件的使用及解析

388 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

什么是 XML?

XML 指可扩展标记语言(Extensible Markup Language)

XML 是一种标记语言,很类似 HTML

XML 的设计宗旨是传输数据,而非显示数据

XML 标签没有被预定义。您需要自行定义标签。

XML 被设计为具有自我描述性。

XML 是 W3C 的推荐标准

XML文档是树结构:

根元素是所有其他元素的父元素

所有的元素都可以拥有子元素


<root>

    <child>

        <subchild>.....</subchild>

    </child>

</root>

XML的语法:

  • 所有的XML元素必须要有结束标签;开始标签、 结束标签
  • 声明不属于XML本身的组成部分;
  • xml的元素使用xml标签进行定义,区分大小写;
  • XML标签之前必须正确嵌套;

          this is test ; a和b的结束标签顺序有要求;

  • 支持空元素:开始和结束标签之间没有任何值的元素,两种写法:
  • XML文档必须包含根元素;
  • XML 的属性值须加引号,  以<prop_name="str_value">的形式存在;

              #在element元素里存在date的属性

  • 支持实体引用,大于(>),小于(<)等,在 XML 中,有 5 个预定义的实体引用:
<<小于
>大于
&&和号
''单引号
""引号
  • <!-- comments -->这是注释
  • 空格字符会被保留

XML元素和属性

XML 元素指的是从<>开始标签直到</>结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

  • XML元素命名规则

    1. 名称可以含字母、数字以及其他的字符

    2. 名称不能以数字或者标点符号开始

    3. 名称不能以字符 “xml”(或者 XML、Xml)开始

    4. 名称不能包含空格

  • XML属性

    1. 属性提供有关元素的额外信息,通常提供不属于数据组成部分的信息
    2. XML 属性必须加引号包围,如果属性值本身包含双引号,那么有必要使用单引号包围它:
    3. 没有规定什么时候使用属性,什么时候使用子元素,根据实际情况自行决定; 但是尽量使用元素而非属性

一个XML的实例

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

<LifecycleServiceConfig>

<service>

        <name>gw</name>              <!-- service name -->

        <path>/usr/bin/gw</path>   <!-- binary file stroage path in rootfs -->

        <args>                                    <!-- arg list -->

                <arg>-h</arg>              <!-- arg -->

        </args>

        <!-- lifecycle config relations -->

        <config clientId="LC_VGW"   <!-- config  properties-->

                domain="DOMAIN_BASE"

                startGroup="0"

                healthCount="4"

                activeMode="SBASE_STATE_STANDBY,SBASE_STATE_ON"

                action="ACTION_RESTART"

        />

    </service>

</LifecycleServiceConfig>

解释:

  1. 第一行是XML的声明,包含了版本信息(1.0),和编码方式(UTF-8),应用程序解析xml文件时需要指定编码方式去解析的;
  2. 是当前xml文件的根元素, 以结尾;
  3. …是根元素的子元素
  4. name, path等是的子元素;
  5. clientId,domain等是元素的属性;

XML文档的包含

xml文档可以包含其他的xml文件,使得xml文件更简洁;包含的xml文件里的元素跟本文件里的元素访问方式一致;

语法介绍:

在元素属性里需要定义xi的命名空间:xmlns:xi="www.w3.org/2001/XInclu…"

该命名空间是由官方指定的,具体可以查看以上的网站信息;

然后使用以下的格式包含xml文件:

  1. xi:include **elements**/

eg:xi:include href="xxx.xml"/

elements有以下几个属性可以设置:

  • href : 对要包括的文档的 URI 引用。
  • parse : 它的值可以是“xml”或“text”,用于定义如何包括指定的文档(是作为 XML 还是作为纯文本)。默认值是“xml”。
  • xpointer : 这是一个 XPointer,用于标识要包括的 XML 文档部分。如果作为文本包括 (parse=”text”),将忽略该属性。
  1. <xi:fallback **elements**/>

eg:

<xi:include href="test.xml" parse="text"/>

    <xi:fallback>Sorry, the file is unavailable<xi:fallback>

</xi:include>

类似与try…except…处理,如果xinclude有问题,则显示fallback的内容;

xml文件包含的例子:

<lifecycleServiceConfig version="1.0" xmlns:xi="<http://www.w3.org/2001/XInclude>">

    <xi:include href="base_domain_services.xml"/>

</lifecycleServiceConfig>
     ```