lower-case
XPath の関数を使用して国または国を照合しようとしています。translate
はちょっと面倒なので、小文字を使用すると、私の Python バージョン 2.6.6 は XPath 2.0 をサポートしています。小文字は XPath 2.0 でしか使用できないためです。
私の場合に小文字を使用する方法は、私が探しているものです。例が自明であることを願っています。出力として探して['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>
パイソン:
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()')