2013-01-21 31 views
0

可能缺少明显的东西 - 当我过滤对于一般的“a”的节点,我能看到自己的文字 - 包括目标链接我想 - 就好:XML的XPath搜索与Python LXML未能在文本()输出滤波器

ipdb> print [x.text for x in root.xpath(u".//a")] 
[u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7', None, ... ] 

但是,当我筛选包含在第一个“一”元素的具体文本上方回来,我什么也没有:

ipdb> print [x.text for x in root.xpath(
    u".//a[text()=" + 
    u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7' + 
    u']' )] 
[] 
ipdb> 

任何想法?

回答

0

有两种语言在这里:Python和XPath的。他们每个人都引用了字符串。

在解释Py​​thon语法时,传递给.xpath()(您的XPath表达式)的字符串内容如下所示:.//a[text()=Some text]。然而文本的文字字符串需要的XPath被引用:.//a[text()="Some text"]。然后,您需要编码在Python字符串。在这里你有几个选择:

.xpath('.//a[text()="Some text"]') 
.xpath(".//a[text()=\"Some text\"]") 
.xpath(""".//a[text()="Some text"]""") 
+0

看起来像SO的语法突出显示不喜欢Python的三重引号... –