使用Python lxml进行XML XPath搜索无法过滤text()输出

时间:2013-01-21 16:30:59

标签: python xpath lxml elementtree

可能遗漏了一些明显的东西 - 当我过滤一般的“a”节点时,我会看到他们的文本 - 包括我想要的目标链接 - 很好:

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

但是当我过滤上面返回的第一个'a'元素中包含的特定文本时,我什么也得不到:

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> 

有什么想法吗?

1 个答案:

答案 0 :(得分: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"]""")