- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章分析如何在Python中解析和修改XML由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
XML代表可扩展标记语言。它在外观上类似于HTML,但XML用于数据表示,而HTML用于定义正在使用的数据。XML专门设计用于在客户端和服务器之间来回发送和接收数据。看看下面的例子:
例子:
<? xml version ="1.0" encoding ="UTF-8" ?> <metadata> <food> <item name ="breakfast" > Idly </item> <price> $2.5 </price> <description> 两个 idly"s with chutney < /description> <calories> 553 </calories> </food> <food> <item name ="breakfast" > Paper Dosa </item> <price> $2.7 </price> < <calories> 700 </calories> </food> <food> <item name ="breakfast" > Upma </item> <price> $3.65 </price> <description> Rava upma with bajji </description> <calories> 600 </calories> </food> <food> <item name ="breakfast" > Bisi Bele Bath </item> <price> $4.50 </price> <description> Bisi Bele Bath with sev </description> <calories> 400 </calories></food> <food> <item name ="breakfast" > Kesari Bath </item> <price> $1.95 </price> <description> 藏红花甜拉瓦 </description> <calories> 950 </calories> </食物> </元数据>
上面的示例显示了我命名为“Sample.xml”的文件的内容,我将在此Python XML解析器教程中为所有即将推出的示例使用相同的内容.
。
Python允许使用两个模块解析这些XML文档,即xml.etree.ElementTree模块和Minidom(最小DOM实现)。解析意味着从文件中读取信息并通过识别该特定XML文件的部分将其拆分为多个部分。让我们进一步了解如何使用这些模块来解析XML数据.
。
该模块帮助我们在树结构中格式化XML数据,这是分层数据的最自然表示。元素类型允许在内存中存储分层数据结构,并具有以下属性:
ElementTree是一个包装元素结构并允许与XML相互转换的类。现在让我们尝试使用python模块解析上述XML文件.
有两种使用“ElementTree”模块解析文件的方法。第一个是使用parse()函数,第二个是fromstring()函数。parse()函数解析作为文件提供的XML文档,而fromstring解析作为字符串提供的XML,即在三引号内.
使用parse()函数:
如前所述,该函数采用文件格式的XML来解析它。看下面的例子:
例子:
import xml.etree.ElementTree as ETmytree = ET.parse("sample.xml")myroot = mytree.getroot()
如您所见,您需要做的第一件事是导入xml.etree.ElementTree模块。然后,parse()方法解析“Sample.xml”文件。getroot()方法返回“Sample.xml”的根元素.
执行上述代码时,您不会看到返回的输出,但不会出现表明代码已成功执行的错误。要检查根元素,您可以简单地使用print语句,如下所示:
例子:
import xml.etree.ElementTree as ETmytree = ET.parse("sample.xml")myroot = mytree.getroot()print(myroot)
输出:
<元素"元数据"在0x033589F0> 。
上面的输出表明我们的XML文档中的根元素是“元数据”.
使用fromstring()函数:
您还可以使用fromstring()函数来解析您的字符串数据。如果要执行此操作,请将XML作为字符串传递给三引号,如下所示:
import xml.etree.ElementTree as ETdata="""<?xml version="1.0" encoding="UTF-8"?><metadata><food> <item name="breakfast">Idly</item> <price>$2.5</price> <description> Two idly"s with chutney </description> <calories>553</calories></food></metadata>"""myroot = ET.fromstring(data)#print(myroot)print(myroot.tag)
上面的代码将返回与前一个相同的输出。请注意,用作字符串的XML文档只是“Sample.xml”的一部分,我使用它来提高可见性。您也可以使用完整的XML文档.
您还可以使用“标签”对象检索根标签,如下所示:
例子:
print(myroot.tag)
输出:
元数据 。
您还可以通过指定要在输出中看到的字符串部分来对标签字符串输出进行切片.
例子:
print(myroot.tag[0:4])
输出:
元 。
如前所述,标签也可以具有字典属性。要检查根标记是否具有任何属性,您可以使用“attrib”对象,如下所示:
例子:
print(myroot.attrib)
输出:
{} 。
如您所见,输出是一个空字典,因为我们的根标签没有属性.
寻找感兴趣的元素:
根也由子标签组成。要检索根标记的子项,您可以使用以下命令:
例子:
print(myroot[0].tag)
输出:
食物 。
现在,如果要检索根的所有第一个子标签,可以使用for循环迭代它,如下所示:
例子:
for x in myroot[0]: print(x.tag, x.attrib)
输出:
item {"name": "breakfast"} 价格{} 描述{} 卡路里{} 。
返回的所有项目都是食物的子属性和标签.
要使用ElementTree将文本从XML中分离出来,您可以使用text属性。例如,如果我想检索有关第一个食品的所有信息,我应该使用以下代码:
例子:
for x in myroot[0]: print(x.text)
输出:
懒懒地 $ 2.5 两悠闲地与酸辣酱的 553 。
可以看到,第一项的文本信息已经作为输出返回了。现在,如果您想显示具有特定价格的所有商品,您可以使用get()方法。此方法访问元素的属性.
例子:
for x in myroot.findall("food"): item =x.find("item").text price = x.find("price").text print(item, price)
输出:
Idly$2.5 Paper Dosa$2.7 Upma$3.65 Bisi Bele Bath$4.50 Kesari Bath$1.95 。
上面的输出显示了所有必需的项目以及每个项目的价格。使用ElementTree,您还可以修改XML文件.
修改XML文件:
可以操作XML文件中的元素。为此,您可以使用set()函数。让我们首先看看如何向XML添加一些东西.
添加到XML:
以下示例显示了如何在项目描述中添加内容.
例子:
for description in myroot.iter("description"): new_desc = str(description.text)+"wil be served" description.text = str(new_desc) description.set("updated", "yes") mytree.write("new.xml")
write()函数帮助创建一个新的xml文件并将更新的输出写入相同的文件。但是,您也可以使用相同的功能修改原始文件。执行完上述代码后,您将能够看到已创建具有更新结果的新文件.
上图显示了对我们食品的修改描述。要添加新的子标签,您可以使用SubElement()方法。例如,如果您想在第一项Idly中添加一个新的专业标签,您可以执行以下操作:
例子:
ET.SubElement(myroot[0], "speciality")for x in myroot.iter("speciality"): new_desc = "South Indian Special" x.text = str(new_desc) mytree.write("output5.xml")
输出:
如您所见,在第一个食品标签下添加了一个新标签。通过在[]括号内指定下标,您可以在任何地方添加标签。现在让我们看一下如何使用此模块删除项目.
从XML中删除:
要使用ElementTree删除属性或子元素,您可以使用pop()方法。此方法将删除用户不需要的所需属性或元素.
例子:
myroot[0][0].attrib.pop("name", None) # create a new XML file with the resultsmytree.write("output5.xml")
输出:
上图显示name属性已从item标记中删除。要删除完整的标签,您可以使用相同的pop()方法,如下所示:
例子:
myroot[0].remove(myroot[0][0])mytree.write("output6.xml")
输出:
输出显示食品标签的第一个子元素已被删除。如果要删除所有标签,可以使用clear()函数,如下所示:
例子:
myroot[0].clear()mytree.write("output7.xml")
输出:
执行上述代码时,food标签的第一个子标签将被完全删除,包括所有子标签。到这里为止,我们一直在使用这个Python XML解析器教程中的xml.etree.ElementTree模块。现在让我们看看如何使用Minidom解析XML.
。
这个模块基本上是由精通DOM(文档对象模块)的人使用的。DOM应用程序通常首先将XML解析为DOM。在xml.dom.minidom中,这可以通过以下方式实现:
使用parse()函数:
第一种方法是通过提供要解析的XML文件作为参数来使用parse()函数。例如:
例子:
from xml.dom import minidomp1 = minidom.parse("sample.xml");
执行此操作后,您将能够拆分XML文件并获取所需的数据。您还可以使用此函数解析打开的文件.
例子:
dat=open("sample.xml")p2=minidom.parse(dat)
在这种情况下,存储打开文件的变量作为参数提供给解析函数.
使用parseString()方法:
当您想要提供要作为字符串解析的XML时,将使用此方法.
例子:
p3 = minidom.parseString("<myxml>Using<empty/> parseString</myxml>")
您可以使用上述任何一种方法来解析XML。现在让我们尝试使用此模块获取数据.
寻找感兴趣的元素:
在我的文件被解析后,如果我尝试打印它,返回的输出会显示一条消息,表明存储解析数据的变量是DOM对象.
例子:
dat=minidom.parse("sample.xml")print(dat)
输出:
<xml.dom.minidom.Document对象在0x03B5A308> 。
使用GetElementByTagName访问元素:
例子:
tagname= dat.getElementsByTagName("item")[0]print(tagname)
如果我尝试使用GetElementByTagName方法获取第一个元素,我将看到以下输出:
输出:
<DOM元素:0xc6bd00处的项目> 。
请注意,只返回了一个输出,因为为了方便我使用了[0]下标,这将在进一步的示例中删除.
要访问属性的值,我必须按如下方式使用value属性:
例子:
dat = minidom.parse("sample.xml")tagname= dat.getElementsByTagName("item")print(tagname[0].attributes["name"].value)
输出:
早餐 。
要检索这些标签中存在的数据,您可以使用data属性,如下所示:
例子:
print(tagname[1].firstChild.data)
输出:
纸Dosa 。
您还可以使用value属性拆分和检索属性的值.
例子:
print(items[1].attributes["name"].value)
输出:
早餐 。
要打印出我们菜单中可用的所有项目,您可以遍历这些项目并返回所有项目.
例子:
for x in items: print(x.firstChild.data)
输出:
袖手旁观 纸DOSA UPMA 碧斯百丽沐浴 Kesari浴 。
要计算菜单上的项目数,您可以使用len()函数,如下所示:
例子:
print(len(items))
输出指定我们的菜单包含5个项目.
这使我们结束了本Python XML解析器教程。我希望你已经清楚地了解了一切.
以上就是分析如何在Python中解析和修改XML的详细内容,更多关于Python解析和修改XML的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/huaweiyun/p/14836021.html 。
最后此篇关于分析如何在Python中解析和修改XML的文章就讲到这里了,如果你想了解更多关于分析如何在Python中解析和修改XML的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!