一. 什么是XML
XML,即可扩展标记语言(eXtensible Markup Language),是一种可以用于描述、存储和传输数据的标准格式。相较于HTML,XML更加灵活,可以自定义标记,非常适合用于不同系统间的数据交互和数据存储。下面我们来看下一个简单的XML示例:
<?xml version="1.0" encoding="UTF-8"?> <students> <student id="001"> <name>Tom</name> <age>18</age> <gender>male</gender> </student> <student id="002"> <name>Lucy</name> <age>20</age> <gender>female</gender> </student> </students>
在上述示例中,<?xml version=”1.0″ encoding=”UTF-8″?>表示该文档是一个XML文档,且版本为1.0,采用UTF-8编码。<students>和</students>用于表示该文档的根元素,其中包含了两个子元素<student>,它们都包含了三个子元素<name>、<age>、<gender>,同时还有一个id属性。
二. XML文档结构
XML文档有以下几个关键部分:
- XML声明:<?xml version=”1.0″ encoding=”UTF-8″?>
- DTD:文档类型定义,定义了文档的元素、属性、顺序等规则;
- 根元素:文档的最外层元素,其他所有元素都是其子元素、孙子元素等;
- 注释:<!–这是一条注释–>;
- 其他元素:可以包含属性、文本、子元素等。
三. 常用XML元素
XML定义了很多元素用于描述数据,下面我们列举几个常用的元素:
- <element>:用于定义元素,可以设置属性和子元素;
- <attribute>:用于定义元素的属性;
- <data>:用于存储数据;
- <comment>:用于添加注释。
四. XML解析
XML文档在不同系统间的传输和存储需要进行解析,常用的解析方式有DOM解析和SAX解析。
1. DOM解析
DOM解析会将整个XML文档解析为一个树形结构,将所有元素都存储在内存中,适合逐个访问和处理每个元素的场景。下面是使用Python的minidom模块解析XML文档的示例:
import xml.dom.minidom # 打开XML文档 doc = xml.dom.minidom.parse("students.xml") # 获取根元素 root = doc.documentElement # 获取所有student元素 students = root.getElementsByTagName("student") for student in students: # 获取id属性和name元素的值 print("id:", student.getAttribute("id"), "name:", student.getElementsByTagName("name")[0].childNodes[0].data)
2. SAX解析
SAX解析是一种基于事件驱动的解析方式,适合处理大型文件和性能要求高的场景。它通过解析器逐行读取文档,遇到元素、属性、文本等事件都会触发相应的回调函数。下面是使用Python的xml.sax模块解析XML文档的示例:
import xml.sax class StudentHandler(xml.sax.ContentHandler): def __init__(self): self.id = "" self.name = "" self.age = "" self.gender = "" # 元素开始事件 def startElement(self, tag, attributes): if tag == "student": self.id = attributes["id"] # 元素结束事件 def endElement(self, tag): if tag == "name": print("id:", self.id, "name:", self.name) elif tag == "age": print("id:", self.id, "age:", self.age) elif tag == "gender": print("id:", self.id, "gender:", self.gender) # 字符串事件 def characters(self, content): if self.id != "": if content.isspace(): return elif self.name == "": self.name = content elif self.age == "": self.age = content elif self.gender == "": self.gender = content if __name__ == "__main__": # 创建解析器 parser = xml.sax.make_parser() # 关闭命名空间 parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 设置回调 handler = StudentHandler() parser.setContentHandler(handler) # 解析XML文档 parser.parse("students.xml")
五. XML的应用
下面列举几个XML的应用场景:
- Web服务中的传输和交换数据;
- 配置文件的存储和读取;
- 异构系统间的数据交换;
- 语言中的富文本存储和传输。
原创文章,作者:ESULX,如若转载,请注明出处:https://www.506064.com/n/331543.html