xpath contains()不起作用:返回每个包含文本的节点,即text不为null

时间:2018-09-19 03:58:53

标签: python xml xpath lxml elementtree

我正在解析一个包含生物学数据的大xml文件。

xml文件的组织方式如下:

<part>
    <part_id>41926</part_id>
    <part_name>BBa_K1906018</part_name>
    <part_short_name>K1906018</part_short_name>
    <part_short_desc>Ribothermometer JB1-G3</part_short_desc>
    <part_type>RBS</part_type>
    <release_status>Not Released</release_status>
    <sample_status>Not in stock</sample_status>
    <part_results>None</part_results>
    <part_nickname/>
    <part_rating/>
    <part_url>http://parts.igem.org/Part:BBa_K1906018</part_url>
    <part_entered>2016-10-14</part_entered>
    <part_author>Yuwei Han</part_author>
    <deep_subparts/>
    <specified_subparts/>
    <specified_subscars/>
    <sequences>
        <seq_data>tactagagctcttattgtaaaacatgtactaaggagtactag </seq_data>
    </sequences>
...
</part>

我已经开发了返回完全匹配的xpath表达式,例如

current_tree.xpath("//part/%s/text()[normalize-space(.)='%s']/../.."
                   "" % (arg_key, arg_values[0]))

其中arg_key将引用文档的节点之一,例如“ part_type”和arg_values [0]将引用诸如“ RBS”之类的参数值。

我正在尝试编写一个xpath表达式,该表达式将查找包含序列主题的所有seq_data节点,并返回最近的部分父节点。

我的xpath表达式可以做到这一点(不起作用)

current_tree.xpath("//seq_data/text()[contains(.,%s)]"
                   "/ancestor::part" % (arg_values[0]))

这将返回其seq_data节点根本不包含任何文本的所有部分,即它将获取seq_data / text()不为空的所有节点。

我不知道为什么。谢谢

0 个答案:

没有答案