2024-07-05 14:18:52 发布
网友
我对XML解析和python也是新手,我需要找到树的子元素并打印它们。你知道吗
我有一个这样的XML文件。这是我的档案- https://gofile.io/?c=OXcdue
我的要求是读取所有具有子队列及其子队列的队列。你知道吗
下面(不使用外部库)
import pprint import xml.etree.ElementTree as ET xml = '''<allocations> <queue name="bdpaas_express_q1"> <minResources>12000 mb,2 vcores,1 disks</minResources> <maxResources>18000 mb,3 vcores,2 disks</maxResources> <aclSubmitApps> xyz</aclSubmitApps> <aclAdministerApps> xyz</aclAdministerApps> <label>allnodes</label> </queue> <queue name="dl_priority_q1"> <minResources>8496000 mb,1416 vcores,108 disks</minResources> <maxResources>12768000 mb,2128 vcores,162 disks</maxResources> <aclSubmitApps> dla_grp</aclSubmitApps> <aclAdministerApps> dla_grp</aclAdministerApps>> <label>fastnodes</label> </queue> <queue name="pireporting_q1"> <minResources>6960000 mb,1160 vcores,87 disks</minResources> <maxResources>10440000 mb,1740 vcores,130 disks</maxResources> <queue name="atscale_rtam_mr_sq1"> <minResources>6000000 mb,1000 vcores,75 disks</minResources> <maxResources>9000000 mb,1500 vcores,112 disks</maxResources> <aclSubmitApps> atscalep</aclSubmitApps> <aclAdministerApps> atscalep</aclAdministerApps> <label>allnodes</label> </queue> <queue name="atscale_spark_sq1"> <minResources>960000 mb,160 vcores,12 disks</minResources> <maxResources>1440000 mb,240 vcores,18 disks</maxResources> <aclSubmitApps> atscalep</aclSubmitApps> <aclAdministerApps> atscalep</aclAdministerApps> <label>allnodes</label> </queue> </queue> <queuePlacementPolicy> <rule create="false" name="specified" /> <rule name="reject" /> </queuePlacementPolicy> </allocations> ''' root = ET.fromstring(xml) queues = root.findall('.//queue') for queue in queues: if queue.find('./queue'): print(ET.tostring(queue, encoding='utf8', method='xml'))
输出
<?xml version="1.0" encoding="UTF-8"?> <queue name="pireporting_q1"> <minResources>6960000 mb,1160 vcores,87 disks</minResources> <maxResources>10440000 mb,1740 vcores,130 disks</maxResources> <queue name="atscale_rtam_mr_sq1" /> <queue name="atscale_spark_sq1" /> </queue>
您可以使用lxml库来解析任何xml内容。这个库比标准的xml库更好,因为它允许您在必要时获取xml文档的名称空间(在您的案例中不需要)。你知道吗
lxml
xml
from lxml import etree tree = etree.parse(path_to_xml_file) root = tree.getroot() for children in root.getchildren(): print (children.tag) for child in children: print(child.tag, child.text)
有关如何访问xml文件的各个部分并递归查找所有子元素的详细信息,请参阅文档here。。本文档适用于标准xml库,但由于lxml构建在xml之上,因此lxml库也支持此文档。你知道吗
下面(不使用外部库)
输出
您可以使用
lxml
库来解析任何xml内容。这个库比标准的xml
库更好,因为它允许您在必要时获取xml文档的名称空间(在您的案例中不需要)。你知道吗有关如何访问xml文件的各个部分并递归查找所有子元素的详细信息,请参阅文档here。。本文档适用于标准
xml
库,但由于lxml
构建在xml
之上,因此lxml
库也支持此文档。你知道吗相关问题 更多 >
编程相关推荐