【发布时间】:2011-10-18 04:28:42
【问题描述】:
我有一个 lxml etree HTMLParser 对象,我试图用它来构建 xpaths 来断言 xpaths、xpath 的属性和该标记的文本。当标签的文本有单引号(')或双引号(“)并且我已经用尽了所有选项时,我遇到了问题。
这是我创建的示例对象
parser = etree.HTMLParser()
tree = etree.parse(StringIO(<html><body><p align="center">Here is my 'test' "string"</p></body></html>), parser)
这是代码的 sn-p,然后是正在读入的变量的不同变体
def getXpath(self)
xpath += 'starts-with(., \'' + self.text + '\') and '
xpath += ('count(@*)=' + str(attrsCount) if self.exactMatch else "1=1") + ']'
self.text 基本上是标签的预期文本,在这种情况下:Here is my 'test' "string"
当我尝试使用 HTMLParser 对象的 xpath 方法时失败
tree.xpath(self.getXpath())
原因是因为它得到的xpath是这个'/html/body/p[starts-with(.,'Here is my 'test' "string"') and 1=1]'
如何正确转义 self.text 变量中的单引号和双引号?我尝试过三重引用,将 self.text 包装在 repr() 中,或者做一个 re.sub 或 string.replace 转义 ' 和 " 与 \' 和 \"
【问题讨论】: