python 文本解析 XML基础

来源:互联网 发布:淘宝确认收货无法评价 编辑:程序博客网 时间:2024/06/05 03:52

Python xml 基础

什么是xml?

  • XML指可扩展标记语言(Extensible Markup Language)
  • XML被设计用于结构化、存储 和传输数据
  • XML是一种标记语言,很类似于HTML
  • XML没有像HTML那样具有预定义标签,需要程序员自定义标签。
  • XML被设计为具有自我描述性,并且是W3C的标准

XML文档(树结构)

XML文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
XML文档必须包含根元素,该元素是所有其他元素分父元素,文档中的所有元素形成了一棵文档树,这棵树从根开始,并扩展到树的最低端,并且所有的元素都可以有子元素:

<root><child><subchild>....</subchild></child></root>

父元素拥有子元素,相同层级上的子元素成为同胞(兄弟或姐妹)。
XML中所有元素都可以有文本内容和属性,类似于HTML。

XML和HTML之间的差异

  • XML被设计用于存储 和传输数据,其焦点是数据的内容,旨传输信息
  • HTML被设计用来显示数据,其焦点是数据的外观,旨在显示信息
  • XML不是HTML的替代,而是对HTML的补充。
  • XML 是独立于软件和硬件的信息传输工具,也是各应用程序间传输数据最常用的工具。

下面是一个关于xml的joy写给ruby的便签:

<?xml version="1.0" encoding="ISO-8859-1"?><notice>    <!--根标签开始--><!--子标签开始--><to>ruby</to><from>joy</from><heading>Inform</heading><body>have a meeting</body></notice>   <!--跟标签结束-->

第一行是xml的声明,定义了xml的版本号和所使用的编码。下一行是一个根元素,根元素下面又嵌套了4个子元素(to,from,heading以及body),最后一行是根元素的结束,该xml文档包含了joy给ruby的通知条。

XML中的注释

XML中注释格式为:

<!--注释内容-->

XML元素

XML的元素是指从开始标签直到结束标签的部分(均包括开始结束)。
一个元素可以包含:

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

XML语法规则

XML的语法规则很简单、易学,但是却很有逻辑。

  • 所有XML元素都必须有一个关闭的标签
    在XML中,省略关闭标签是非法的,所有元素都必须有关闭标签(除声明标签),这跟HTML有点差别,因为HTML中某些元素不必须有一个关闭标签。
<p> test test</p><br />
  • XML标签对大小写敏感
    因为XML对大小写敏感,所以必须使用相同大小写来编写打开标签和关闭标签,如:
<Note>this is a test1</Note><note>this is a test2</note>

上面实例中和是不一样的。
注意:打开标签和关闭标签也叫开始标签和结束标签,无论您喜欢哪种术语,它们的含义都是相同的。

  • XML必须正确嵌套
    在HTML中常可以不用正确嵌套元素,而在XML中,所有的元素都必须正确的嵌套,父元素就必须完全包住子元素。如:
<note><b>this is a test2</b></note>
  • XML文档必须有根元素
    XML文档必须有一个元素是所有其他元素的父元素,该元素称为根元素。如:
<note><b>this is a test2</b><name>joy</name></note>

上例中的就是根元素。

  • XML属性值必须加引号
    在XML中,元素的属性值是一个键值对形式(即 名称/值 对)。在XML中,属性值必须加引号。如:
<book category=" Python"><title>Learing Python</title><author>xxx</author><color>red</color></book>

book元素中的属性category的值Python必须用引号引起来,使用单引号和双引号都可以,但如果属性值本身包含双引号,就使用单引号;如果包含单引号,就使用双引号。如:

<gangster name='George "Shotgun" Ziegler'>

使用属性易引起的一些问题:

  • 属性不能包含多个值(元素可以)
  • 属性不能包含树结构(元素可以)
  • 属性不容易扩展(不能拥抱未来的变化)

属性难以阅读和维护,所以尽量使用元素来描述数据,而仅仅使用属性来提供一些与数据无关的信息。

实体引用

XML中,一些字符拥有特殊意思,“<”表示新元素的开始,如果把该符号放到XML元素中,XML解析器就会把它当成新元素的开始,这样机会产生错误。如:

<title>Learing <Python </title>

为了避免这个错误,XML提供了实体引用来代替那些具有特殊意思的字符。XML中,拥有5个预定义的实体引用:

1

在XML中,只有字符“<”和“&”是非法的,其它都是合法的,但使用实体引用来代替是一个好习惯。如:

<b>12 &gt; 10 </b>

注意:
在HTML中会把多个连续的空格字符合并为一个,而XML中,文档的空格不会被删减。

XML命名规则

XML元素必须遵循以下命名规则:

  • 名称可以包含字母、数字以及其他字符
  • 名称不能以数字或标点符号开头
  • 名称不能以字母xml或XML开始
  • 名称不能包含空格
  • 可以使用任何名称,没有保留字
  • 名称应该具有描述性,简短和简单,可以同时使用下划线。
  • 避免“-”、“.”、“:”等字符。

CDATA

CDATA(Unparsed Character Data)指的是不应由XML解析器进行解析的文本数据。
因为XML解析器会将“<”(新元素的开始)和“&”(字符实体的开始)解析成具有特殊含义的字符,所以如果在文本中需要使用这些字符时,就必须使用实体引用去代替。但是有些文本,如JavaScript代码中会包含大量的“<”和“&”符号,这时我们可以将我们的脚本定义为CDATA来避免这个这个问题,因为CDATA部分中所有的内容都会被XML解析器忽略。

CDATA固定语法格式为:

<![CDATA["我们写的代码"]]>

如:

<script><![CDATA[function test(x, y){    if (x < 0 && y < 0) then    {        return 0;    }    else     {        return 1;    }}]]></script>

上面是一段JavaScript代码,解析器会忽略CDATA部分中的所有内容。

注意:
CDATA部分不能包含字符串“]]>”(并且这字符串之间不能有空格或折行等字符),如果包含了,会以为是CDATA的结束。也不允许嵌套CDATA部分。

0 0
原创粉丝点击