xpath содержит () не работает: возвращает каждый узел, который содержит текст, т.е. где текст не является нулевым - PullRequest
0 голосов
/ 19 сентября 2018

Я анализирую большой 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 ()не пусто

Я не могу понять, почему.Спасибо

...