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