我正在尝试使用XPath中的
我需要知道如何在我的情况下使用
现在问题是,我能否将翻译部分存储为全局变量“handlecase”,并在执行XPath时打印该全局变量?
类似这样的代码可以实现:
lower-case
函数匹配国家或地区名。由于translate
功能有点混乱,因此我使用lower-case
。我相信我的Python版本2.6.6支持XPath 2.0,因为lower-case
仅适用于XPath 2.0。我需要知道如何在我的情况下使用
lower-case
。希望这个示例可以自说明。我希望输出['USA', 'US']
(如果lower-case
将Country和country视为相同,则可以同时输出这两个国家)。
HTML: doc.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()')
lxml支持XPath 1.0
,因此使用lxml时只能使用translate函数。 - Martijn Pieterslower-case()
,lxml确实会抱怨:“lxml.etree.XPathEvalError:Unregistered function”。在“*我实际上通过做...”之后的代码肯定不正确。 - mzjn