,我们经常需要解析用不同语言编写的数据。Python提供了许多库来解析或拆分用其他语言编写的数据。在本Python XML解析器教程中,您将学习如何使用Python解析XML。这
,我们经常需要解析用不同语言编写的数据。Python提供了许多库来解析或拆分用其他语言编写的数据。在本Python XML解析器教程中,您将学习如何使用Python解析XML。
这里是本教程中涉及的所有主题:
什么是XML?Python XML解析模块xml.etree.ElementTree目录树模块
使用parse()函数使用fromstring()函数查找感兴趣的元素修改添加到XML的XML文件从XML
中删除xml.dom.minidom模块
使用parse()函数使用fromString()函数查找感兴趣的元素
,让我们开始吧。:)
什么是XMLXML代表可扩展标记语言。它在外观上类似于HTML,但是XML用于数据表示,而HTML用于定义正在使用的数据。XML专门用于在客户机和服务器之间来回发送和接收数据。请看下面的示例:
示例:
2.5美元两个懒汉和酸辣酱在一起553纸Dosa加酸辣酱的普通纸多沙7003.65美元6004.50美元比西贝尔巴斯4001.95美元带藏红花的甜葡萄酒950
上面的示例显示了我命名为'示例.xml“我将在本Python XML解析器教程中为所有即将到来的示例使用相同的代码。”
“Python XML解析模块”
“Python允许使用两个模块来解析这些XML文档,即xml.etree.ElementTree目录树模块和Minidom(最小DOM实现)。解析意味着从一个文件中读取信息,并通过识别该特定XML文件的各个部分将其分割为多个部分。让我们进一步了解如何使用这些模块解析XML数据。
xml.etree.ElementTree目录树模块:
这个模块帮助我们在树形结构中格式化XML数据,这是层次数据最自然的表示。元素类型允许在内存中存储分层数据结构,并具有以下属性:
属性描述标记它是一个字符串,表示要存储的数据类型属性由多个属性组成,这些属性存储为字典文本字符串一个文本字符串,其中包含需要显示的信息如果有必要,Tail String也可以有Tail String子元素,这些子元素由多个存储为序列的子元素组成
ElementTree是一个类,它包装元素结构并允许与XML之间的转换。现在让我们尝试使用python模块解析上面的XML文件。
有两种方法可以使用“ElementTree”模块解析文件。第一个是使用parse()函数,第二个是fromstring()函数。parse()函数解析作为文件提供的XML文档,而fromstring在作为字符串提供时解析XML即在三个引号中,使用parse()函数的
如前所述:
,此函数接受文件格式的XML来解析它。请看下面的示例:
示例:
导入xml.etree.ElementTree目录树作为ET我的根=我的树.getroot(
如您所见,您首先需要做的是导入xml.etree.ElementTree目录树模块。然后,parse()方法解析示例.xml'文件。getroot()方法返回'示例.xml'.
执行上述代码时,您将不会看到返回的输出,但不会有错误指示代码已成功执行。要检查根元素,只需使用print语句如下:
示例:
导入xml.etree.ElementTree目录树作为ETmyroot=mytree.getroot()打印(myroot)
输出:位于0x033589F0的
上述输出指示XML文档中的根元素是“metadata”。
使用fromstring()函数:
还可以使用fromstring()函数解析字符串数据。如果您想这样做,请将XML作为字符串传递到三个引号中,如下所示:
import XML.etree.ElementTree as ET数据='''懒散地'''myroot=ET.fromstring(数据)打印(我的根.tag)
上述代码将返回与前一个代码相同的输出。请注意,用作字符串的XML文档只是'示例.xml“我用它来提高能见度。也可以使用完整的XML文档。
还可以使用“tag”对象检索根标记,如下所示:
示例:
打印(我的根.tag)
输出:元数据
只需指定要在输出中看到字符串的哪一部分,就可以对标记字符串输出进行切片。
示例:
打印(我的根.tag[0:4])
输出:元
如前所述,标记也可以有字典属性。要检查根标记是否具有任何属性,可以使用“attrib”对象,如下所示:
示例:
print(马钱草)
输出:{}
如您所见,输出是一个空字典,因为根标记没有属性。
查找感兴趣的元素:
根也由子标记组成。要检索根标记的子标记,可以使用以下命令:
示例:
print(myroot[0].tag)
OUTPUT:food
如果要检索根的所有第一个子标记,可以使用for循环遍历它,如下所示:
示例:
for x in myroot[0]:打印(x.text)
输出:
Idly$2.5 Two Idly's with chutney 553
如您所见,第一个项目的文本信息已作为输出返回。现在,如果要显示所有具有特定价格的项,可以使用get()方法。此方法访问元素的属性。
示例:myroot.findall('food')中x的
:price=x.find('price').textnew_desc=str(description.text) “将提供”description.set('已更新','是')我的树.write('新.xml')
write()函数帮助创建新的xml文件并将更新的输出写入该文件。但是,也可以使用相同的函数修改原始文件。执行上述代码后,您将能够看到一个新文件已创建,其中包含更新的结果。
上图显示了对我们的食品的修改说明。要添加新的子标记,可以使用SubElement()方法。例如,如果您想在第一个项目中添加一个新的专业标记Idly,可以执行以下操作:
示例:
等子元素(myroot[0],'专业')new_desc='南印度特色菜'x、 文本=str(新描述)mytree.write('output5.xml')
输出:
如您所见,第一个食品标签下添加了一个新标签。通过在[]方括号内指定下标,可以在任何位置添加标记。现在让我们来看看如何使用这个模块删除项目。
从XML中删除:
要使用ElementTree删除属性或子元素,可以使用pop()方法。此方法将删除用户不需要的所需属性或元素。
示例:
myroot[0][0].attrib.pop('name',None)#创建包含结果的新XML文件mytree.write('output5.xml')
输出:
上图显示名称属性已从项标记中删除。要删除完整的标记,可以使用相同的pop()方法,如下所示:
示例:
myroot[0].remove(myroot[0][0])mytree.write('output7.xml')
OUTPUT:
执行上述代码时,将完全删除食品标签的第一个子标签,包括所有子标签。在此之前,我们一直在使用Python xml解析器教程中的xml.etree.ElementTree模块。现在让我们来看看如何使用Minidom.
.XML.dom.Minidom模块解析XML:
这个模块基本上是由精通dom(文档对象模块)的人使用的。DOM应用程序通常从将XML解析为DOM开始。在xml.dom.minidom中,这可以通过以下方式实现:
使用parse()函数:
第一个方法是通过提供要作为参数解析的xml文件来使用parse()函数。例如:
示例:xml.dom import minidom中的
p1=minidom.parse("示例.xml“);”
“一旦执行,就可以分割XML文件并获取所需的数据。还可以使用此函数分析打开的文件。
示例:
dat=open('示例.xml')p2=minidom.parse(dat)
在本例中,存储打开文件的变量作为参数提供给parse函数。
使用parse string()方法:
当您希望提供要作为字符串分析的XML时,使用此方法。
示例:
p3=minidom.parseString('使用parseString')
您可以使用上述任何方法解析XML。现在让我们尝试使用这个模块来获取数据。
查找感兴趣的元素:
在分析完我的文件之后,如果我尝试打印它,返回的输出将显示一条消息,说明存储分析数据的变量是DOM的对象。
示例:
dat=minidom.parse('sample.xml')打印(dat)
输出:
使用GetElementByTagName访问元素:
示例:
标记名=dat.getElementsByTagName('item')[0]打印(标记名)
如果我试图使用GetElementByTagName方法获取第一个元素,我将看到以下输出:
输出:
请注意,仅返回了一个输出,因为为了方便起见,我使用了[0]下标,这将在以后的操作中删除示例。
要访问属性的值,我必须使用如下的值属性:
示例:
dat=minidom.parse('sample.xml')标记名=日期getElementsByTagName(“项目”)打印(x.firstChild.data)
输出:
Idly Paper Dosa Upma Bisi Bele Bath Kesari Bath
以计算菜单上的项目数,您可以使用len()函数,如下所示:
示例:
print(len(items))
输出:5
输出指定我们的菜单由5个项组成。
这将结束本Python XML解析器教程。我希望你已经明白了一切。
确保你尽可能多的练习和恢复你的经验。