我正在运行以下查询:
//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p/string(.)
我收到以下错误:
lxml.etree.XPathEvalError:无效的表达式
但是,如果我使用以下表示法:
//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p/text()
一切都很好。
我认为问题在于使用string(.)
表示法,但是当我对其进行测试时,here很好,所以我假设它的语法正确。
我实际上正在运行以下代码:
from lxml import html
tree = html.fromstring(PAGE_CONTENT)
results = tree.xpath(QUERY)
有没有一种我可以使用的替代方法,该方法允许使用这样的表达式? string-join
似乎引起类似的问题。
答案 0 :(得分:2)
出现错误的原因是符号
.../string(.)
仅在XPath 2.0或更高版本中有效。在XPath 1.0中,它无效并引发错误。
在XPath-1.0中有效的替代方法是将整个表达式包装在string(...)
函数中,如下所示:
string(//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p)