我試圖在XPath中使用lower-case
函數來匹配國家或國家。 translate
有點麻煩,所以使用小寫字母和我的Python版本2.6.6具有XPath 2.0支持我相信因爲小寫字母只在XPath 2.0中可用。如何使用lxml進行Python XPath不區分大小寫的搜索?
我如何在我的情況下使用小寫字母是我正在尋找的。希望這個例子是自我解釋的。我正在尋找['USA', 'US']
作爲輸出(如果小寫評估的國家和國家相同,則可以一次性發送兩個國家)。
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文檔](http://lxml.de/xpathxslt.html):'lxml支持XPath 1.0';因此,使用lxml,您會被翻譯卡住。 –
在這種情況下,我不確定爲什麼當我使用小寫字母時不會抱怨。在這個示例場景中,我對翻譯沒有太大的好運。謝謝! – ThinkCode
[可能的重複](http://stackoverflow.com/questions/9804281/selectnodes-with-xpath-ignoring-cases/9805020#9805020) – JWiley