【问题标题】:Strip html from sqlite search on android从android上的sqlite搜索中删除html
【发布时间】:2014-07-01 07:04:02
【问题描述】:

我有一个数据,假设这是我的数据:

<div class=main>
<ol>

  <li>Vestibulum feugiat nisi dolor, et pharetra nisl tincidunt et. <span class=b1>Pellentesque</span> metus sem, condimentum quis massa nec, fringilla consectetur risus. </li>
  <li>Morbi eu nisi quis dui ultricies luctus eu facilisis diam. <span class=b1>Pellentesque</span> non orci lorem. Suspendisse elementum rhoncus nulla sit amet condimentum. </li>
</ol>
</div>

该数据存储在sqlite中的表“ini”和列“Text”中。

我有这个搜索功能:

public void search(View view) {

    String cari = searchText.getText().toString();

    if(cari.length() > 3){
    // || is the concatenation operation in SQLite
    cursor = db.rawQuery("SELECT Text FROM ini WHERE Text LIKE ?", 
                    new String[]{"%" + cari + "%"});
    adapter = new SimpleCursorAdapter(
            this, 
            R.layout.search_list_item, 
            cursor, 
            new String[] {"Text"}, 
            new int[] {R.id.text});
    setListAdapter(adapter);
    }else{
        setListAdapter(null);
    }   
}

假设我想搜索“Pellentesque metus”,其中两个词之间有&lt;/span&gt;(Pellentesque &lt;/span&gt;metus)。如何删除这个&lt;/span&gt;?或者当搜索查询调用时如何修剪所有 html?

对不起我的英语

提前致谢

【问题讨论】:

    标签: android html sqlite search trim


    【解决方案1】:

    您可以在表格中创建额外的列并放置剥离的 html

    html.replaceAll("<[^>]*>", StringUtil.EMPTY)
    

    那么你就可以用这个栏目代替你的真实栏目了。

    【讨论】:

    • 没有别的办法了吗?
    • 我在我的项目中经常使用这种方式。我认为它是最好的之一。
    【解决方案2】:

    以下公用表表达式查询回答了您的问题(适用于短 html 格式的字符串),但不建议用于生产。

    WITH RECURSIVE
      input(str) AS (
        VALUES('
          <div class=main>
          <ol>
            <li>Vestibulum feugiat nisi dolor, et pharetra nisl tincidunt et. <span class=b1>Pellentesque</span> metus sem, condimentum quis massa nec, fringilla consectetur risus. </li>
            <li>Morbi eu nisi quis dui ultricies luctus eu facilisis diam. <span class=b1>Pellentesque</span> non orci lorem. Suspendisse elementum rhoncus nulla sit amet condimentum. </li>
          </ol>
          </div>
        ')
      ),
      output(id, str) AS (
        SELECT 1, str
        FROM input
        UNION ALL
        SELECT id+1,
          trim(
            replace(str, 
              substr(str, instr(str, '<'), instr(str, '>') - instr(str, '<') + 1)
            , ''),
          x'200a')
        FROM output WHERE instr(str, '<') OR instr(str, '>')
      ),
      raw(html) AS (
        SELECT str FROM output ORDER BY id DESC LIMIT 1
      )
    SELECT html FROM raw WHERE html LIKE '%Pellentesque metus%';
    

    输出:

    Vestibulum feugiat nisi dolor, et pharetra nisl tincidunt et. Pellentesque metus sem, condimentum quis massa nec, fringilla consectetur risus. 
      Morbi eu nisi quis dui ultricies luctus eu facilisis diam. Pellentesque non orci lorem. Suspendisse elementum rhoncus nulla sit amet condimentum.
    

    欢迎提出任何改进建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多