首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中使用lxml来获得以下元素?

如何在Python中使用lxml来获得以下元素?
EN

Stack Overflow用户
提问于 2015-11-23 10:08:24
回答 1查看 285关注 0票数 2

我有下一个XML文件:

代码语言:javascript
复制
<separator colspan="4" string="Application"/>
<field name="sel_groups_9_28_10" modifiers="{}"/>
<newline/>
<field name="sel_groups_49_50" modifiers="{}"/>
<newline/>
<field name="sel_groups_68" modifiers="{}"/>
<newline/>
<field name="sel_groups_36_37" modifiers="{}"/>
<newline/>
<field name="sel_groups_21_22_23" modifiers="{}"/>
<newline/>
<field name="sel_groups_43_44" modifiers="{}"/>
<newline/>
<field name="sel_groups_5_57_58" modifiers="{}"/>
<newline/>
<field name="sel_groups_59_60" modifiers="{}"/>
<newline/>
<field name="sel_groups_61_62" modifiers="{}"/>
<newline/>
<field name="sel_groups_19" modifiers="{}"/>
<newline/>
<field name="sel_groups_3_4" modifiers="{}"/>
<newline/>
<separator colspan="4" string="MY GROUP"/>
<field name="in_group_144" modifiers="{}"/>
<field name="in_group_142" modifiers="{}"/>
<field name="in_group_148" modifiers="{}"/>
<field name="in_group_147" modifiers="{}"/>
<field name="in_group_146" modifiers="{}"/>
<field name="in_group_145" modifiers="{}"/>
<field name="in_group_141" modifiers="{}"/>
<field name="in_group_143" modifiers="{}"/>
<separator colspan="4" string="Technical configuration"/>
<field name="in_group_30" modifiers="{}"/>
<field name="in_group_46" modifiers="{}"/>
<field name="in_group_12" modifiers="{}"/>
<field name="in_group_45" modifiers="{}"/>
<field name="in_group_33" modifiers="{}"/>
<field name="in_group_66" modifiers="{}"/>
<field name="in_group_25" modifiers="{}"/>
<field name="in_group_32" modifiers="{}"/>

这棵树的共同结构是:

代码语言:javascript
复制
<separator 1/>
<field 1/>
<field 2/>
<field N/>
<separator 2/>
<field 1/>
<field 2/>
<field N/>
<separator N/>
<field 1/>
<field 2/>
<field N/>

我想要的是获得字符串与我的组和所有字段不同的分隔符,直到下一个分隔符(我的目的是使除分隔符MY组和字段in_group_144、in_group_142、in_group_148、in_group_147、in_group_146、in_group_145、in_group_141和in_group_143以外的每个元素不可见)。

XML树将改变其字段名,因此按其名称获取字段将不是一个解决方案。

在这里,lxml/Python : get previous-sibling给出了如何获取前一个同级,但是如何才能以一种高效的方式获得其标记为分隔符的前一个兄弟呢?

我目前的解决方案:

代码语言:javascript
复制
def get_previous_separator(self, element):
    previous_element = element.getprevious()
    if previous_element.tag == 'separator':
        return previous_element
    else:
        return get_previous_separator(element)

for element in tree:
    if self.get_previous_separator(element).string != 'MY GROUP':
        MAKE ELEMENT INVISIBLE

有比递归方法更直接的方法来管理我的目标吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 10:24:33

您可以使用简单的XPath从当前的separator中获取最近的同级separator元素:

代码语言:javascript
复制
element.xpath('preceding-sibling::separator[1]')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33868323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档