Как избежать строки в python для использования в качестве ключа xpath - PullRequest
1 голос
/ 19 июня 2020

Я получил эту ключевую ошибку в python

  KeyError: ("./note/[@player='Ba'g']",)

при использовании

  player = "Ba'g"
  xpathstring = "./note/[@player='{}']".format(player.replace("'","\'"))
  p = xmltree.find(xpathstring)

Итак, мне интересно, как избежать строки, чтобы я мог использовать ее как поиск xpath строка в xmltree

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я предлагаю этот обходной путь (XPath 2.0):

Предполагая, что у вас есть элемент с атрибутом, который содержит одинарные и двойные кавычки:

<div>
<note player="Ba&apos;g&quot;N Toast">foo</note>
</div>

Чтобы выбрать этот узел с помощью XPath и фиксированная переменная, мы можем использовать что-то вроде:

import  re
player = '''Ba'g"N Toast'''
result = re.sub(r"(.+)", r"'\1'",player.replace("'","',codepoints-to-string(39),'").replace('"',"',codepoints-to-string(34),'"))
xpathstring = "//note[@player=concat({})]".format(result)
p = xmltree.find(xpathstring)

Мы заменяем ' и " их эквивалентами кодовых точек. Результат будет передан функции concat в выражении XPath.

0 голосов
/ 19 июня 2020

В настоящее время вы передаете строку "./note/[@player='Ba'g']" функции поиска.

Кажется, нет способа правильно избежать одинарных кавычек в xpath .

Однако вы можете переключаться с одинарных кавычек на двойные. Попробуйте:

 xpathstring = "./note/[@player=\"{}\"]".format(player)

Это предлагаемое решение связанной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...