📜  XML教程(1)

📅  最后修改于: 2023-12-03 15:21:18.972000             🧑  作者: Mango

XML教程

XML(可扩展标记语言)是一种文本格式,用于存储和传输数据。它被广泛用于Web开发和数据交换。本教程将向您介绍XML的基础知识和语法。

什么是XML?

XML是一种被用于描述数据的标记语言。与HTML不同,XML不是固定的标记集。它允许使用者自己定义标记集,因此更加灵活。

XML的常见应用包括:

  • Web开发,如RSS(Really Simple Syndication)和Atom博客、Web服务、网站地图。
  • 客户端-服务器应用程序之间的数据交换。
  • 针对移动设备的配置文件和软件更新。
  • 构建中间件,用于数据交换。
XML语法

XML由元素(element)和属性(attribute)组成。

XML元素

XML元素是XML文件的基本结构单位。它始于一个起始标记,结束于一个结束标记,中间包含要被描述的数据。

XML元素的语法格式如下:

<elementTag>data</elementTag>

其中,elementTag是元素的标记,data是元素所包含的数据。例如:

<book>
  <title>鬼吹灯之精绝古城</title>
  <author>天下霸唱</author>
  <price>35</price>
</book>

在这个例子中,<book>是元素的起始标记,</book>是元素的结束标记,<title><author><price>是book元素的子元素。

XML属性

属性是位于元素标记内,与该元素相关的名称/值对。属性的语法格式如下:

<elementTag attributeName="attributeValue">data</elementTag>

例如:

<person name="Mike Smith">Hello, Mike!</person>

在这个例子中,<person>标记有一个名为name的属性,属性值为Mike Smith

XML声明

XML声明指明了XML的版本和字符编码。它应该位于XML文档中的第一行。如下所示:

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

在XML文档中,注释用于让程序员在代码中添加对代码的解释或说明。注释以<!--起始,-->结束。例如:

<!-- This is a comment -->
XML解析

XML解析是指把XML文件转化为XML文档对象模型(DOM)或XML简单API(SAX)。

DOM解析器

DOM(Document Object Model)解析器会将XML文档转化为一个XML文档树,以便程序员可以更容易地反向操作。DOM解析器将整个XML文档读入到内存中,并且允许开发者使用DOM中的方法和属性。

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

# 输出root元素的标记
print(root.tag)

# 输出所有元素及其子元素和文本内容
for child in root:
    print(child.tag, child.attrib)
    for c in child:
        print(c.tag, c.text)
SAX解析器

SAX(Simple API for XML)解析器是一种基于事件的解析器。它不需要读取整个XML文档,只需要逐行读取XML文档,并调用相关的事件来处理。SAX解析器更适用于大文件的解析。

import xml.sax

class MyHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.current = ""
        self.title = ""
        self.author = ""
        self.price = ""

    # 读取每个元素的开始标记
    def startElement(self, tag, attributes):
        self.current = tag

    # 读取每个元素的结束标记
    def endElement(self, tag):
        if self.current == "title":
            print("Title: ", self.title)
        elif self.current == "author":
            print("Author: ", self.author)
        elif self.current == "price":
            print("Price: ", self.price)

    # 读取元素标记之间的数据
    def characters(self, content):
        if self.current == "title":
            self.title = content
        elif self.current == "author":
            self.author = content
        elif self.current == "price":
            self.price = content

# 创建SAX解析器并解析XML
parser = xml.sax.make_parser()    
parser.setContentHandler(MyHandler())   
parser.parse("data.xml")
总结

本教程向您介绍了XML的基础知识、语法以及XML的解析方法。XML是一门重要的标记语言,应用广泛。对于Web开发来说,学习XML是不可或缺的一部分。