我有一个 XPath,它在 XPath 中有一个单引号,导致 SyntaxError: error
。
我试过转义序列:
xpath = "//label[contains(text(),'Ayuntamiento de la Vall d'Uixó - Festivales Musix')]"
但我仍然面临错误:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//label[contains(text(),'Ayuntamiento de la Vall d'Uixó - Festivales Musix')]' is not a valid XPath expression.
请您参考如下方法:
XPath 字符串文字中没有引号转义。 (注意:此答案适用于 XPath 1.0。在更高版本的 XPath 中,此问题已得到解决 - 请参阅下面的评论。)
在纯 XPath 中获得所需结果的唯一方法是连接交替引用的字符串。
//label[contains(., concat('Ayuntamiento de la Vall d', "'", 'Uixó - Festivales Musix'))]
您可以通过在单引号处拆分目标字符串并使用 ', "'", '
作为新分隔符再次连接各部分来机械地构建这些类型的表达式。 Python 示例:
search_value = "Ayuntamiento de la Vall d'Uixó - Festivales Musix" # could contain both " and '
xpath = "//label[contains(., %s)]" % xpath_string_escape(search_value)
def xpath_string_escape(input_str):
""" creates a concatenation of alternately-quoted strings that is always a valid XPath expression """
parts = input_str.split("'")
return "concat('" + "', \"'\" , '".join(parts) + "', '')"
一些 XPath 库支持绑定(bind)参数(很像 SQL)来解决这个问题,但以上是唯一适用于任何地方的方法。