【问题标题】:How to use like in XPath?如何在 XPath 中使用 like?
【发布时间】:2012-09-11 09:04:54
【问题描述】:

我有一个使用过滤器进行搜索的页面。例如,我有这个代码,

xmlTempResultSearch = xmlResidentListDisplay.selectNodes("//PeopleList/Row[@LastName != '"+txtSearch.value+"']");
xmlTempResultSearch.removeAll();

这会选择不等于在 txtSearch 文本框中输入的姓氏的数据,然后将它们从结果集中删除,以便过滤到等于 txtSearch 文本框中的姓氏。

我对这段代码的问题是它应该等于(=)txtSearch.value,我想要的是结果集LIKEtxtSearch.value。在我的页面上发生的情况是,当我在 txtSearch 文本框中键入“santos”时,其结果集是所有带有“santos”的姓氏。但是当我输入“sant”时,什么也没有出现。我想要与 'santos' 相同的结果集,因为它都包含 'sant'

【问题讨论】:

    标签: xpath operator-keyword


    【解决方案1】:

    您可以使用所有 XPath (1.0) 字符串函数。如果您有 XPath 2.0 可用,那么您甚至可以使用 RegEx

    contains()

    starts-with()

    substring()

    substring-before()

    substring-after()

    concat()

    translate()

    string-length()

    XPath 1.0 中没有 **ends-with(),但可以用这个 XPath 1.0 表达式轻松表达**:

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

    正好是true(),当字符串$s以字符串$t结尾时。

    【讨论】:

      【解决方案2】:

      您可以使用 start-with 函数而不是函数。参考:

      http://www.w3schools.com/xpath/xpath_functions.asp

      xmlTempResultSearch = xmlResidentListDisplay.selectNodes("//PeopleList/Row[not(starts-with(@LastName,'"+ txtSearch.value +"'))]");
      

      【讨论】:

        【解决方案3】:

        你可以使用 XPath 的 contains() 函数:

        xmlTempResultSearch = xmlResidentListDisplay.selectNodes("//PeopleList/Row[not(contains(@LastName,'"+txtSearch.value+"'))]");
        

        【讨论】:

        • 我无法让它工作。我一直在寻找“兄弟”,因为我想获得的姓氏是“Broerman”。我收到一条错误消息:错误:预期的令牌 ']' 找到了 'NAME'。 //PeopleList/Row[not-->包含
        • 哦,对不起,这里应该是not(contains(...))
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 2017-05-17
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多