【问题标题】:How to do advanced filters in CardDAV (WebDAV) REPORT request如何在 CardDAV (WebDAV) REPORT 请求中进行高级过滤
【发布时间】:2013-01-03 11:19:14
【问题描述】:

我的电子名片有一个 CATEGORIES 属性,它有一个逗号分隔的值列表。我想要的是在这个逗号分隔列表中的某处获取所有具有传递值的 vcard。

我正在尝试使用过滤器执行 CardDAV REPORT 请求以完成此操作:

<C:filter test="allof"> 
<C:prop-filter name="CATEGORIES"  test="allof"> 
<C:text-match collation="i;unicode-casemap" 
match-type="contains" 
>searched_value</C:text-match> 
</C:prop-filter> 
</C:filter> 

这个过滤器的问题是它会匹配属性中任意位置传递的值,这意味着它也会匹配另一个值内的值,例如:

如果我搜索“friends”,它会匹配“work,friends,colleagues”以及“work,football_friends,coleagues”。

我找不到使用 WebDAV 过滤器在逗号分隔列表中仅获取“完整”值的方法。

【问题讨论】:

    标签: http filter report webdav carddav


    【解决方案1】:

    我终于用不同的匹配类型解决了这个问题:

    <C:filter> 
    <C:prop-filter name="CATEGORIES"  test="anyof"> 
    <C:text-match collation="i;unicode-casemap" 
    match-type="equals">value</C:text-match> 
    <C:text-match collation="i;unicode-casemap" 
    match-type="contains">,value,</C:text-match> 
    <C:text-match collation="i;unicode-casemap" 
    match-type="ends-with">,value</C:text-match> 
    <C:text-match collation="i;unicode-casemap" 
    match-type="starts-with">value,</C:text-match> 
    </C:prop-filter> 
    </C:filter> 
    

    详情:

    如果任何包含的文本匹配项匹配(逻辑或),则匹配:

    <C:prop-filter name="CATEGORIES"  test="anyof"> 
    

    此文本匹配将匹配与该值完全相等的值(这是逗号分隔列表中唯一的值):

    <C:text-match collation="i;unicode-casemap" 
    match-type="equals">value</C:text-match> 
    

    这将匹配包含两个逗号之间的值的值(这是逗号分隔列表中间部分的值):

    <C:text-match collation="i;unicode-casemap" 
    match-type="contains">,value,</C:text-match> 
    

    这将匹配以逗号结尾的值,后跟值(这是逗号分隔列表最后位置的值):

    <C:text-match collation="i;unicode-casemap" 
    match-type="ends-with">,value</C:text-match> 
    

    这将匹配以逗号分隔的值开头的值(这是逗号分隔列表的第一个位置的值):

    <C:text-match collation="i;unicode-casemap" 
    match-type="starts-with">value,</C:text-match> 
    

    这样只会匹配逗号分隔列表中的完整值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多