怎么用手机做网站教程,做网站要不要服务器,网页升级访问中每天正常更新中,做科普网站什么是 XML#xff1f; XML#xff08;可扩展标记语言#xff0c;Extensible Markup Language#xff09;是一种用于表示和传输数据的标记语言。它被设计用来以一种结构化的形式描述文档的内容#xff0c;并且具有良好的跨平台和跨语言的特性。XML使用标签来定义数据的结构…什么是 XML XML可扩展标记语言Extensible Markup Language是一种用于表示和传输数据的标记语言。它被设计用来以一种结构化的形式描述文档的内容并且具有良好的跨平台和跨语言的特性。XML使用标签来定义数据的结构并可以通过自定义标签来适应各种不同的应用领域。
XML的主要特点包括
可扩展性XML允许用户自定义标签因此可以根据不同需求灵活扩展和定义数据结构。适应性XML可以用于描述各种不同类型的数据包括文本、图像、音频、视频等多媒体数据。平台无关性XML是一种纯文本格式不依赖于任何特定的硬件或软件平台。易于阅读和编写XML文档使用标签进行结构化表示使其易于人类阅读和编辑。广泛应用XML在诸如Web服务Web Services、配置文件、数据交换等领域得到广泛应用。
通常在XML中数据以标签tag的形式包裹并且可以使用属性attributes来提供更多的信息。下面是一个简单的XML示例
personnameJohn Doe/nameage30/agegenderMale/gender
/person这段XML描述了一个人员信息包括姓名、年龄和性别。XML的灵活性和通用性使其成为数据交换、配置文件、Web服务等领域中常用的数据表示格式。
Python 对 XML 的解析方案 常见的 XML 编程接口有 DOM 和 SAX这两种接口处理 XML 文件的方式不同当然使用场合也不同。
Python 有三种方法解析 XMLElementTree、SAX 以及 DOM。 ElementTree xml.etree.ElementTree 是 Python 标准库中用于处理 XML 的模块它提供了简单而高效的 API用于解析和生成 XML 文档。 SAX (simple API for XML ) Python 标准库包含 SAX 解析器SAX 用事件驱动模型通过在解析 XML 的过程中触发一个个的事件并调用用户定义的回调函数来处理 XML 文件。 DOM(Document Object Model) 将 XML 数据在内存中解析成一个树通过对树的操作来操作 XML。
后面用到的实例文件
collection shelfNew Arrivals
movie titleEnemy BehindtypeWar, Thriller/typeformatDVD/formatyear2003/yearratingPG/ratingstars10/starsdescriptionTalk about a US-Japan war/description
/movie
movie titleTransformerstypeAnime, Science Fiction/typeformatDVD/formatyear1989/yearratingR/ratingstars8/starsdescriptionA schientific fiction/description
/moviemovie titleTriguntypeAnime, Action/typeformatDVD/formatepisodes4/episodesratingPG/ratingstars10/starsdescriptionVash the Stampede!/description
/movie
movie titleIshtartypeComedy/typeformatVHS/formatratingPG/ratingstars2/starsdescriptionViewable boredom/description
/movie
/collectionPython 使用 ElementTree 解析 xml
xml.etree.ElementTree 是 Python 标准库中用于处理 XML 的模块。
以下是 xml.etree.ElementTree 模块的一些关键概念和用法
ElementTree 和 Element 对象:
ElementTree ElementTree 类是 XML 文档的树形表示。它包含一个或多个 Element 对象代表整个 XML 文档。Element Element 对象是 XML 文档中元素的表示。每个元素都有一个标签、一组属性和零个或多个子元素。
接下来让我们分步进行解释
解析 XML
首先需要导入 ElementTree 模块并使用 ET.parse() 方法加载 XML 文件。
本例中文件名为 example.xml。
使用 ET.parse() 方法加载 XML 文件并使用 getroot() 方法获取 XML 树的根元素 root。
import xml.etree.ElementTree as ETtree ET.parse(example.xml)
root tree.getroot()遍历 XML 树
要遍历 XML 树可以使用循环来遍历子元素。每个元素都有标签名 (tag)、属性 (attrib) 和文本内容 (text)。
for movie in root.findall(movie):title movie.get(title)print(fMovie title: {title})description movie.find(description).textprint(fDescription: {description})format movie.find(format).textprint(fFormat: {format})在上面的示例中使用 findall(movie) 方法遍历所有 movie 元素。然后我们使用 get(title) 获取电影的标题属性以及 find(description).text 获取描述子元素的文本内容以及格式等。
访问元素属性和文本
使用 get(attr_name) 方法来访问元素的属性。使用 find(subelement) 方法来获取子元素然后使用 .text 属性来获取子元素的文本内容。
创建 XML 元素
要创建新的 XML 元素可以使用 ET.SubElement() 方法并将其附加到父元素中。
new_movie ET.SubElement(root, movie)
new_movie.set(title, New Movie Title)new_description ET.SubElement(new_movie, description)
new_description.text Exciting new movie上面的例子中我们创建了一个新的 movie 元素并设置了它的标题属性和描述子元素的文本内容。
修改和删除 XML 元素
要修改现有元素的属性或文本内容只需直接对相应的属性进行赋值操作即可。要删除元素可以使用 remove() 方法。
# 修改元素属性
movie.set(title, New Title)# 修改子元素文本内容
description.text New description# 删除元素
root.remove(movie)简单读取 XML 内容
import xml.etree.ElementTree as ET# 定义一个 XML 字符串
xml_string
bookstorebooktitleIntroduction to Python/titleauthorJohn Doe/authorprice29.99/price/bookbooktitleData Science with Python/titleauthorJane Smith/authorprice39.95/price/book
/bookstore
# 使用 ElementTree 解析 XML 字符串
root ET.fromstring(xml_string)# 遍历 XML 树
for book in root.findall(book):title book.find(title).textauthor book.find(author).textprice book.find(price).textprint(fTitle: {title}, Author: {author}, Price: {price})以上代码执行输出结果为
Title: Introduction to Python, Author: John Doe, Price: 29.99
Title: Data Science with Python, Author: Jane Smith, Price: 39.95Python 使用 SAX 解析 xml
SAX 是一种基于事件驱动的API。
利用 SAX 解析 XML 文档牵涉到两个部分: 解析器和事件处理器。
解析器负责读取 XML 文档并向事件处理器发送事件如元素开始跟元素结束事件。
而事件处理器则负责对事件作出响应对传递的 XML 数据进行处理。
对大型文件进行处理只需要文件的部分内容或者只需从文件中得到特定信息。想建立自己的对象模型的时候。
在 Python 中使用 sax 方式处理 xml 要先引入 xml.sax 中的 parse 函数还有 xml.sax.handler 中的 ContentHandler。 ContentHandler 类方法介绍
使用xml.dom解析xml
ContentHandler 类是 Python 的 xml.sax 模块中定义的一个标准接口用于处理 XML 文档的内容。下面是常用的 ContentHandler 类方法、参数和简要介绍以及配合示例
方法介绍与参数 startDocument() 参数无介绍开始解析文档时调用用于初始化解析状态。
def startDocument(self):print(Start parsing document)endDocument() 参数无介绍结束解析文档时调用用于清理解析过程中占用的资源。
def endDocument(self):print(End parsing document)startElement(tag, attributes) 参数tag 表示元素标签名attributes 是一个字典类型包含了元素的属性。介绍遇到 XML 元素的开始标签时调用用于处理元素的开始部分。
def startElement(self, tag, attributes):print(fStart element: {tag})if attributes:print(Attributes:, attributes)endElement(tag) 参数tag 表示元素标签名。介绍遇到 XML 元素的结束标签时调用用于处理元素的结束部分。
def endElement(self, tag):print(fEnd element: {tag})characters(content) 参数content 是元素内的字符数据文本内容。介绍用于处理元素内的字符数据。
def characters(self, content):print(Character data:, content)make_parser, parser 和 parseString 都是与 XML 解析相关的函数或类通常用于解析和处理 XML 数据。下面是它们的简要介绍 xml.sax.make_parser() xml.sax.make_parser() 函数用于创建并返回一个新的 SAX 解析器对象。示例import xml.sax
parser xml.sax.make_parser()parser parser 是由 xml.sax.make_parser() 创建的 SAX 解析器对象。它可以通过调用其他方法和设置内容处理器来实现 XML 数据的解析和处理。示例parser.setFeature(xml.sax.handler.feature_namespaces, 0)parseString() 在针对 XML 字符串进行解析时使用的方法。它是 xml.sax 模块中 xml.sax.parseString() 的同义词。示例xml_string notetoTove/tofromJani/fromheadingReminder/headingbodyDont forget me this weekend!/body/note
parser xml.sax.make_parser()
handler MyContentHandler()
parser.setContentHandler(handler)
parser.parseString(xml_string)这些函数和方法都是 xml.sax 模块中用于解析 XML 的一部分。通过使用它们可以有效地处理和操作 XML 数据。
示例代码
import xml.saxclass MyContentHandler(xml.sax.ContentHandler):def startDocument(self):print(Start parsing document)def endDocument(self):print(End parsing document)def startElement(self, tag, attributes):print(fStart element: {tag})if attributes:print(Attributes:, attributes)def endElement(self, tag):print(fEnd element: {tag})def characters(self, content):print(Character data:, content)# 创建 XML 解析器对象
parser xml.sax.make_parser()
# 关闭命名空间处理
parser.setFeature(xml.sax.handler.feature_namespaces, 0)# 设置内容处理器
content_handler MyContentHandler()
parser.setContentHandler(content_handler)# 解析 XML 文件
xml_file example.xml
with open(xml_file, r) as file:parser.parse(file)以上示例展示了如何创建一个自定义的 ContentHandler 类 MyContentHandler 并使用它来解析 XML 文件。在这个例子中我们重写了 startDocument()、endDocument()、startElement()、endElement() 和 characters() 方法来处理不同类型的事件和内容。
使用xml.dom解析xml
文件对象模型Document Object Model简称DOM是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时一次性读取整个文档把文档中所有元素保存在内存中的一个树结构里之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构也可以把修改过的内容写入xml文件。
#!/usr/bin/python3from xml.dom.minidom import parse
import xml.dom.minidom# 使用minidom解析器打开 XML 文档
DOMTree xml.dom.minidom.parse(movies.xml)
collection DOMTree.documentElement
if collection.hasAttribute(shelf):print (Root element : %s % collection.getAttribute(shelf))# 在集合中获取所有电影
movies collection.getElementsByTagName(movie)# 打印每部电影的详细信息
for movie in movies:print (*****Movie*****)if movie.hasAttribute(title):print (Title: %s % movie.getAttribute(title))type movie.getElementsByTagName(type)[0]print (Type: %s % type.childNodes[0].data)format movie.getElementsByTagName(format)[0]print (Format: %s % format.childNodes[0].data)rating movie.getElementsByTagName(rating)[0]print (Rating: %s % rating.childNodes[0].data)description movie.getElementsByTagName(description)[0]print (Description: %s % description.childNodes[0].data)结果
Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom
关注我不迷路共学习同进步
关注我不迷路共学习同进步