动态形成对xpath的请求,引号问题

时间:2019-10-25 09:49:38

标签: python xpath lxml quotes

我在使用lxml时遇到了一些问题,但是不保留原始文件,例如,如果我有一个包含以下内容的xml文件:

  <column caption='Choix Découpage'   name='[Aujourd&apos;Hui Parameter (copy 2)]'>
            <alias key='&quot;Frais de Services&quot;' value='Offline Fees' />
  </column>

我看了别名节点的关键属性

from lxml import etree
import sys
tree = etree.parse('test.xml')
root = tree.getroot()
print([node.attrib['key'] for node in root.xpath("//alias")]) # we get ['"Billetterie Ferroviaire"']
value = [node.attrib['key'] for node in root.xpath("//alias")][0]

现在,如果我想检索所有具有属性“ Billetterie Ferroviaire”的别名节点,则可以这样做(另一篇文章中给出的解决方案,再次感谢):

root.xpath("//alias[@key='\"Frais de Services\"']")

但是假设我想动态地形成查询:

"//alias[@key='\"Frais de Services\"']"

但是Python对字符串使用简单的引号,因此我无法准确地编写此查询。也许xpath了解其他等效形式?如果有人可以向我解释为什么Python使用简单Quote以及如何解决此类问题,我会有些失落(当我想为其他程序生成字符串以使其结构良好时,是否总是有其他方法)。希望足够清楚地得到帮助。

1 个答案:

答案 0 :(得分:0)

只需转义那些不想让Python解释为关闭字符串的撇号:

 test = 'string which contains \'apostrophes\''

变量test将包含以下字符串:

string which contains 'apostrophes'

我不确定如何解释Python为什么使用撇号将字符串括起来。这只是语言设计师的决定。字符串可以用撇号或双引号引起来,通常,最好使用那些未出现在它们所包含的字符串中的字符串(或更少的字符串),因此您无需转义它们:

test = "string with 'apostrophes'"
test = 'string with "double quotes"'
test = 'string with both \'apostrophes\' and "double quotes"'