我正在处理“父母”的数据集。元素标记在运行时是未知的,但我需要返回它和具有某个属性的任何子元素,我希望用XPath做到这一点,但我不再确定我可以;谁能帮我一把?
这是一个示例数据集:
<Images>
<Unknown1>
<Image url="http://a.jpg" type="art" id="1"/>
</Unknown1>
<Unknown2>
<Image url="http://b.jpg" type="art" id="1"/>
<Image url="http://c.jpg" type="art" id="2"/>
<Image url="http://d.jpg" type="draft" id="3"/>
<Image url="http://e.jpg" type="draft" id="4"/>
<Image url="http://f.jpg" type="poster" id="5"/>
<Image url="http://g.jpg" type="poster" id="6"/>
</Unknown2>
</Images>
现在我需要按&#39;类型&#39;过滤所以我想要回归的是(如果我使用&#39;艺术&#39;过滤):
<Unknown1>
<Image url="http://a.jpg" type="art" id="1"/>
</Unknown1>
<Unknown2>
<Image url="http://b.jpg" type="art" id="1"/>
<Image url="http://c.jpg" type="art" id="2"/>
</Unknown2>
令人讨厌的是,我不需要列出所有“图像”的列表。元素,而是一个列表(包含&#39;未知&#39;元素(运行时未知的实际标签)和它们包含的过滤子元素(结构如上)。
有没有可以帮助我的大师?纯XPath解决方案会更好,但我不确定它是否可行?
提前致谢。
答案 0 :(得分:2)
这是一个可以满足您需求的XPATH。可能有替代方案,我还没有检查它是否适用于lxml:
//*[@type='art']/parent::*
或者您可以将其限制为:
//Image[@type='art']/parent::*
我发现http://www.zvon.org在xpath方面非常有用。它甚至有一点试验场:http://www.zvon.org/comp/tests/r/test-xlab.html#intro
@Andersson是对的,如果您查询父母,您将获得包括其所有子女在内的父母。 所以,你必须迭代孩子并让他们的父母使用lxml。