xpaths、xpathの属性とそのタグのテキストをアサートするために、xpathsをビルドしようとしているlxml etree HTMLParserオブジェクトがあります。私は、タグのテキストは、単一引用符( ')または二重引用符( ")のどちらかを持っている問題に走ったと私はすべてのオプションを使い果たしました。ここで 一重引用符と二重引用符を正しくエスケープする方法
は私が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のメソッドを使用しようとすると、それを取得XPathはこの「/html/body/p[starts-with(.,'Hereは私であるため、
tree.xpath(self.getXpath())
理由がある失敗'test' "string" ')1 = 1]'
self.text変数から一重引用符と二重引用符を正しくエスケープするにはどうしたらいいですか?私はトリプルクォート、repr()でのself.textのラップ、またはre.subやstring.replaceを使って 'and'と\ 'and \ "をエスケープしようとしました。
私はlxmlからエラーが発生しています:XPathEvalError:無効な式、スタックトレースが lxml.etree._ElementTree.xpath(src/lxml/tmp)の "lxml.etree.pyx" lxml.etree.c:45934) ファイル "xpath.pxi"、行379、lxml.etree.XPathDocumentEvaluator .__ call__(src/lxml/lxml.etree.c:114389) ファイル "xpath.pxi"、行242 、lxml.etree._XPathEvaluatorBase._handle_result(src/lxml/lxml.etree.c:113063) ファイル "xpath.pxi"、228行目、lxml.etree._XPathEvaluatorBase._raise_eval_error(src/lxml/lxml.etree。 c:112935) –
mmh、式が無効であると言われるので、エラーは 'lxml'によって発生します。 'print'によってレンダリングされたときに' xpath'の値を貼り付けてください。 –
'と'を対応するHTMLエンティティでエスケープしてしまったのですが、昨夜は本当に疲れていて、実際にはその文字列が解析されているとは考えていませんでした。このガイダンスをお寄せいただきありがとうございます –