如何使用lxml进行pythonxpath不区分大小写的搜索?

2024-10-02 22:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在XPath中使用lower-case函数匹配国家或地区。translate有点混乱,所以我相信使用小写和我的python2.6.6版本支持XPath 2.0,因为小写只在XPath 2.0中可用。在

如何在我的案件中使用小写是我正在寻找的。希望这个例子不言自明。我正在寻找['USA', 'US']作为输出(两个国家一次可以发生,如果小写评估国家和国家是相同的)。在

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:

^{pr2}$

更新:

out.xpath('//table/tr/td[text()[contains(translate(., "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") , "country")]]/span/text()')

现在问题仍然存在,我是否可以将translate部分存储为全局变量'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()')

Tags: texttable国家outcountryxpathtrtranslate
2条回答

使用

   //td[translate(substring(text()[1], string-length(text()[1]) - 9),
                  'COUNTRY :',
                  'country'
                  )
        =
         'country'
       ]
        /span/text()

基于XSLT的验证

^{pr2}$

将此转换应用于提供的XML文档时:

<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>
</html>

计算XPath表达式并将选定的两个文本节点复制到输出:

 USA  UK 

说明

  1. 我们使用XPath 1.0表达式的一个特定变体,它实现XPath 2.0标准函数ends-with($text, $s):这是:

。。。。。在

$s = substring($text, string-length($text) - string-length($s) +1)

.2。下一步是使用translate()函数,将结束的10个字符长的字符串转换为小写,消除任何空格或“:”字符。在

.3。如果结果是字符串(全部小写)“country”,那么我们选择这个td的s=span子节点的子文本节点(在本例中只有一个)。在

我相信最简单的事情就是编写一个XPath扩展函数。在

通过这样做,您既可以编写lower-case()函数,也可以编写不区分大小写的搜索。在


您可以在这里找到详细信息:http://lxml.de/extensions.html

相关问题 更多 >