Skip to main content
 首页 » 编程设计

python之Python xpath中如何处理单引号和双引号

2024年11月01日152php

我有一个 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)来解决这个问题,但以上是唯一适用于任何地方的方法。