我正在尝试使用lower-case
XPath 中的函数匹配国家或地区。translate
有点乱,所以使用小写字母并且我的 Python 版本 2.6.6 支持 XPath 2.0 我相信因为小写字母仅在 XPath 2.0 中可用。
我正在寻找如何在我的情况下使用小写字母。希望这个例子是不言自明的。我正在寻找['USA', 'US']
输出(如果小写评估 Country 和 country 相同,则可能会同时发生这两个国家)。
HTML:文档.htm
<html>
<table>
<tr>
<td>
Name of the Country : <span> USA </span>
</td>
</tr>
<tr>
<td>
Name of the country : <span> UK </span>
</td>
</tr>
</table>
Python :
import lxml.html as lh
doc = open('doc.htm', 'r')
out = lh.parse(doc)
doc.close()
print out.xpath('//table/tr/td[text()[contains(. , "Country")]]/span/text()')
# Prints : [' USA ']
print out.xpath('//table/tr/td[text()[contains(. , "country")]]/span/text()')
# Prints : [' UK ']
print out.xpath('//table/tr/td[lower-case(text())[contains(. , "country")]]/span/text()')
# Prints : [<Element td at 0x15db2710>]
更新 :
out.xpath('//table/tr/td[text()[contains(translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") , "country")]]/span/text()')
现在问题仍然存在,我可以将翻译部分存储为全局变量“handlecase”并在执行 XPath 时打印该全局变量吗?
像这样的工作:
handlecase = """translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")"""
out.xpath('//table/tr/td[text()[contains(%s , "country")]]/span/text()' % (handlecase))
但为了简单和可读性,我想像这样运行它:
out.xpath('//table/tr/td[text()[contains(handlecase , "country")]]/span/text()')