我有点难以破解。自从我使用LXML以来,我需要一些帮助才能开始。我有一个XML文件,其中包含类别和代理元素的列表。请参阅下面的代码:
<categories>
<category name="Light">
<proxy>fan</proxy>
</category>
<category name="UI">
<proxy>doorbell</proxy>
</category>
</categories>
我想要做的是搜索所有代理元素以找到&#34; doorbell&#34;。如果找到,我想知道它来自的父元素的名称。因此,在上面的示例中,门铃将在父类别elementnamed&#34; UI&#34;下找到。最后,我只需要&#34; name&#34;的价值。代理所属的父元素的属性。
那里的任何大师都想帮我解决这个问题吗?
答案 0 :(得分:2)
如果您只需要名称,也可以在一次搜索中完成所有操作:
import lxml.etree as ET
root = ET.XML('''
<categories>
<category name="Light">
<proxy>fan</proxy>
</category>
<category name="UI">
<proxy>doorbell</proxy>
</category>
</categories>
''')
category_names = root.xpath(
'.//proxy[. = $proxy_type]/parent::category/@name',
proxy_type='doorbell')
print category_names
...正如人们所期望的那样发出:
['UI']