gpt4 book ai didi

python - Elementtree,检查元素是否有特定的父元素?

转载 作者:行者123 更新时间:2023-12-01 05:41:33 25 4
gpt4 key购买 nike

我正在解析一个 xml 文件:http://pastebin.com/fw151jQN我希望在副本中读取它的大部分内容并将其写入一个新文件,其中一些已修改,很多未修改,还有很多被忽略。作为初始阶段,我想找到某些 xml,并将其原封不动地写入新文件。

下面是首先感兴趣的 xml 部分:

<COMMAND name="shutdown"
help="Shutdown the selected interface">
<CONFIG priority="0x7F01" />
<ACTION>
/klas/klish-scripts/interfaces.py conf -i ${iface} --enable 0
</ACTION>
</COMMAND>

<COMMAND name="no shutdown"
help="Enable the selected interface">
<CONFIG operation="unset" pattern="shutdown"/>
<ACTION>
/klas/klish-scripts/interfaces.py conf -i ${iface} --enable 1
</ACTION>
</COMMAND>

我的代码如下

#!/usr/bin/python -tt

import xml.etree.ElementTree as ET
tree = ET.parse('interface_range_test.xml')
root = tree.getroot()
namespaces = {'command': 'http://clish.sourceforge.net/XMLSchema}COMMAND','config': 'http://clish.sourceforge.net/XMLSchema}CONFIG'}

all_links = tree.findall('.//')

for i in all_links:
if namespaces['command'] in i.tag:
if i.attrib['name'] == "shutdown":
print i.attrib
if namespaces['config'] in i.tag:
print i.attrib

输出:

{'name': 'shutdown', 'help': 'Shutdown the selected interface'}
{'priority': '0x7F01'}
{'pattern': 'shutdown', 'operation': 'unset'}

这会读入文件,我可以找到关闭信息,现在我想找到CONFIG信息,然后是action信息及其文本,但是当我搜索了有关 shutdownno shutdownCONFIG 信息。这种情况会出现在很多xml中,很多都有相同的格式。

关闭: {'优先级':'0x7F01'}不关机: {'pattern': '关机', '操作': '取消设置'}

如何指定要查看的内容,我可以检查此信息的父项吗?或者我可以检查其上方 super 元素的子元素(http://clish.sourceforge.net/XMLSchema}COMMAND)吗?

最佳答案

您可以将所有命令作为节点(元素)进行搜索,并从那里获取配置信息,例如

import xml.etree.ElementTree as ET
tree = ET.parse('interface_range_test.xml')
root = tree.getroot()

for command in root.iter("{http://clish.sourceforge.net/XMLSchema}COMMAND"):
subs = list(command.iter('{http://clish.sourceforge.net/XMLSchema}CONFIG'))
if len(subs) > 0: #we found CONFIG
print command.tag, command.attrib, subs[0].tag, subs[0].attrib

你会得到:

{http://clish.sourceforge.net/XMLSchema}COMMAND {'name': 'shutdown', 'help': 'Shutdown the selected interface'} {http://clish.sourceforge.net/XMLSchema}CONFIG {'priority': '0x7F01'}
{http://clish.sourceforge.net/XMLSchema}COMMAND {'name': 'no shutdown', 'help': 'Enable the selected interface'} {http://clish.sourceforge.net/XMLSchema}CONFIG {'pattern': 'shutdown', 'operation': 'unset'}

顺便说一句,如果您需要处理大的 xml 文件,我建议使用 lxml ,其中还有 ElementTree compatible interface但比 python 的标准 xml 库快得多。

关于python - Elementtree,检查元素是否有特定的父元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com