如何在Python中解析和修改 XML?
XML代表可扩展标记语言。它旨在存储和传输数据。它被设计为人类和机器可读的。这就是为什么 XML 的设计目标强调在 Internet 上的简单性、通用性和可用性。
注意:有关详细信息,请参阅 XML |基本
这里我们认为 XML 文件存在于内存中。请阅读代码中的注释以获得清晰的理解。
XML 文件:
让我们将上面的 XML 文件保存为“test.xml” 。在继续之前,您应该知道在 XML 中我们没有像在 HTML 中那样预定义的标签。在编写 XML 时,作者必须定义他/她自己的标签以及文档结构。现在我们需要解析这个文件并使用Python修改它。我们将使用Python 3的“minidom”库来完成上述任务。这个模块没有内置在Python中。要安装此类型,请在终端中输入以下命令。
pip install minidom
读取 XML
首先我们将阅读 XML 文件的内容,然后我们将学习如何修改 XML 文件。
例子
import xml.dom.minidom as md
def main():
# parsing the xml file and
# storing the contents in
# "file" object Put in the
# path of your XML file in
# the parameter for parse() method.
file = md.parse( "test.xml" )
# nodeName returns the type of
# the file(in our case it returns
# document)
print( file.nodeName )
# firstChild.tagName returns the
# name of the first tag.Here it
# is "note"
print( file.firstChild.tagName )
firstname = file.getElementsByTagName( "fname" )
# printing the first name
print( "Name: " + firstname[ 0 ].firstChild.nodeValue )
lastname = file.getElementsByTagName( "lname" )
# printing the last name
print( "Surname: " + lastname[ 0 ].firstChild.nodeValue )
favgame = file.getElementsByTagName( "favgame" )
# printing the favourite game
print( "Favourite Game: " + favgame[ 0 ].firstChild.nodeValue )
# Printing tag values having
# attributes(Here tag "player"
# has "name" attribute)
players = file.getElementsByTagName( "player" )
for player in players:
print( player.getAttribute( "name" ) )
if __name__=="__main__":
main();
输出:
#document
note
Name: Jack
Surname: Shelby
Favourite Game: Football
Messi
Ronaldo
Mbappe
在上面的Python代码中,在打印First Name或Last Name时,我们使用了firstname[0] / lastname[0] 。这是因为只有 1 个“fname”和只有 1 个“lname”标签。对于多个相同的标签,我们可以像下面这样继续。
XML:
Python
import xml.dom.minidom as md
def main():
file = md.parse( "test.xml" )
names = file.getElementsByTagName( "fname" )
for name in names:
print( name.firstChild.nodeValue )
if __name__=="__main__":
main();
输出
Jack
John
Harry
修改 XML
现在我们对如何使用Python解析和读取 XML 文件的内容有了基本的了解。现在让我们学习修改XML 文件。
XML 文件:
让我们添加以下内容:
- 高度
- 杰克知道的语言
让我们删除“爱好”标签。还让我们将年龄修改为29 。
Python代码:(修改 XML)
import xml.dom.minidom as md
def main():
file = md.parse("test.xml")
height = file.createElement( "height" )
# setting height value to 180cm
height.setAttribute("val", "180 cm")
# adding height tag to the "file"
# object
file.firstChild.appendChild(height)
lan = [ "English", "Spanish", "French" ]
# creating separate "lang" tags for
# each language and adding it to
# "file" object
for l in lan:
lang = file.createElement( "lang" )
lang.setAttribute( "lng", l )
file.firstChild.appendChild( lang )
delete = file.getElementsByTagName( "hobby" )
# deleting all occurences of a particular
# tag(here "hobby")
for i in delete:
x = i.parentNode
x.removeChild( i )
# modifying the value of a tag(here "age")
file.getElementsByTagName( "age" )[ 0 ].childNodes[ 0 ].nodeValue = "29"
# writing the changes in "file" object to
# the "test.xml" file
with open( "test.xml", "w" ) as fs:
fs.write( file.toxml() )
fs.close()
if __name__=="__main__":
main();
输出:
Python代码的最后 3 行只是使用toxml()方法将“file”对象转换为 XML 并将其写入“test.xml”文件。如果您不想编辑原始文件而只想打印修改后的 XML,则将这 3 行替换为:
print(file.toxml())
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。