我有我试图建立与XPath的断言的XPath一个LXML etree的HTMLParser对象,属性是标签的XPath和文字。我跑进当标签的文本有两种单引号(')或双引号(“)问题,我已经用尽我的所有选项。如何正确逃生单引号和双引号
这里是我创建
parser = etree.HTMLParser()
tree = etree.parse(StringIO(<html><body><p align="center">Here is my 'test' "string"</p></body></html>), parser)
一个样本对象
这里的代码片断,然后被读取
def getXpath(self)
xpath += 'starts-with(., \'' + self.text + '\') and '
xpath += ('count(@*)=' + str(attrsCount) if self.exactMatch else "1=1") + ']'
self.text变量的不同变化基本上是标签的预期的文本,在这种情况下:这是我的“测试”“串”
当我尝试使用的HTMLParser对象的XPath的方法失败
tree.xpath(self.getXpath())
原因是因为它得到了XPath是这个“/html/body/p[starts-with(.,'Here是我的'test'“string”')and 1 = 1]'
如何正确地从self.text变量中转义单引号和双引号?我尝试了三重引用,在repr()中包装self.text,或者做一个re.sub或string.replace转义'和'与\'和\“
我看到,我得到的错误是从lxml:XPathEvalError:无效的表达式,堆栈跟踪是 文件“lxml.etree.pyx”,行2029,在lxml.etree._ElementTree.xpath(src/lxml/lxml.etree.c:45934) lxml.etree.XPathDocumentEvaluator .__ call__(src/lxml/lxml.etree.c:114389)中的文件“xpath.pxi”,第379行, 文件“xpath.pxi”,第242行,在lxml.etree._XPathEvaluatorBase._raise_eval_error(src/lxml/lxml.etree)中,文件“xpath.pxi”,第228行,在lxml.etree._XPathEvaluatorBase._handle_result(src/lxml/lxml.etree.c:113063) c:112935) –
mmh,由'lxml'引发错误,因为表达式被认为是无效的。你可以粘贴“xpath”的值,当用'print'渲染时? –
用他们相应的HTML实体转义'和“做了诀窍。昨晚我真的很累,并没有想到这个字符串实际上是HTML被解析的。感谢您提供这个指导 –