python—如何通过只指定';名称';
我正在学习xml解析和Python,并试图编写一个只允许指定“name”的函数,它可以搜索我的xml并返回文本值 目前,我的功能仅限于通过“常规设置”进行搜索:python—如何通过只指定';名称';,python,xml,Python,Xml,我正在学习xml解析和Python,并试图编写一个只允许指定“name”的函数,它可以搜索我的xml并返回文本值 目前,我的功能仅限于通过“常规设置”进行搜索: import xml.etree.ElementTree as ET tree = ET.parse('template.xml') def getValues(tree, category): for prop_node in tree.iterfind("FileTemplate/properties/o
import xml.etree.ElementTree as ET
tree = ET.parse('template.xml')
def getValues(tree, category):
for prop_node in tree.iterfind("FileTemplate/properties/obj[@name='GeneralSettings']/properties/prop[@name='%s']" % category):
return prop_node.text
print getValues(tree, 'FilePattern')
有什么好的技术可以让我只需输入搜索“name”就可以编写一个函数,它可以像在unix中一样自动搜索root下的所有内容“find”-名字'?例如,如果我为“UseLapsedTime”调用get text value,我可以使用相同的函数来告诉它搜索name=UseLapsedTime吗
我的xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<autostart version="2.0">
<FileState>0</FileState>
<FileTemplate clsid="{6F6FBFC1-3F14-46CA-A269}">
<properties>
<obj name="TypeSettings" clsid="{6F6FBFC1-3F14-46CA-A269}">
<properties>
<prop name="Enumerator" type="8">en0</prop>
<prop name="Name" type="8">en0</prop>
<prop name="Type" type="3">1</prop>
</properties>
</obj>
<obj name="GeneralSettings" clsid="{6F6FBFC1-3F14-46CA-A269}">
<properties>
<prop name="BufferSize" type="21">524288000</prop>
<prop name="FilePattern" type="8">auto_eth0</prop>
</properties>
</obj>
<obj name="NiCSettings" clsid="{6F6FBFC1-3F14-46CA-A269}">
<properties>
<prop name="interface" type="21">eth0</prop>
</properties>
</obj>
<obj name="Trigger" clsid="{E801FFF9-AE26-4DD7-A349">
<trigger enabled="0" notify="1" severity="0" togglecapture="1">
<triggerevents>
<triggereventobj clsid="{EC5E8097-B3D5-4B8D-AA64}">
<triggerevent use="0" useelapsedtime="0" time="0" enabled="0" />
</triggereventobj>
</triggerevents>
</trigger>
</obj>
</properties>
</FileTemplate>
0
en0
en0
1.
524288000
自动_eth0
eth0
是的。使用
tree.iterfind(./*[@name='%s']%name)
细分:
树
是起始节点。在本例中,是解析的根元素
表示XPATH描述以树开始
/
表示递归任意数量的级别
<代码> */代码>意味着考虑任何标记
<代码> [name='fo'] < /> >仅考虑属性名为fo
的元素
%s
表示将变量的值替换为字符串
因此:
tree.iterfind(“./*[@name='%s']%name)
表示:
- 从
树开始
- 通过每一个层次
- 查找任何元素,无论其标记名如何
- 使用名为
name
的属性
- 哪个属性的值等于变量
name
的内容
看看lxml包及其xpath()方法。这真的是您的XML吗?它实际上不是有效的XML。注意开头的非关闭的autostart
标记?也许这是应该关闭的,或者应该是一个属性?