我正在关注扩展函数的lxml文档,并希望模仿upper-caseXPath 2.0中的函数.
import urllib
from lxml import html, etree
ns = etree.FunctionNamespace(None)
ns['upper-case'] = lambda context, s: str.upper(s)
google_page = urllib.request.urlopen('http://www.google.com').read().decode('latin-1')
google_page_tree = html.fromstring(google_page)
# text == ['Google.com']
text = google_page_tree.xpath('//a[@id="fehl"]/text()')
# TypeError: descriptor 'upper' requires a 'str' object but received a 'list'
text = google_page_tree.xpath('//a[upper-case(@id)="FEHL"]/text()')
Run Code Online (Sandbox Code Playgroud)
看来这不是正确的方法,因为我看到upper-case收到一个空列表[].有任何想法吗?谢谢.
我不熟悉您的 XPath API,但@id在 XPath 1.0 中选择具有单个属性节点的节点集,在 XPath 2.0 中选择具有单个属性节点的序列。我假设该str.upper方法需要一个字符串值,而不是//a[upper-case(@id) = ...]try //a[upper-case(string(@id)) = ...]。这样,XPath 表达式应该生成一个 Python 函数知道要使用的字符串。
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |