【问题标题】:Flutter: How can I parse the "title" data in the HTML attribute and display it in ListView?Flutter:如何解析HTML属性中的“title”数据并在ListView中显示?
【发布时间】:2021-02-01 02:33:19
【问题描述】:

我无法解析和过滤所需的 HTML 数据。我通过 CSS 选择器接近了数据,但是当我在 ListView 中打印过滤后的数据时,它在 ListView 中只显示“”。我使用 Dio 来获取 HTML 源代码,并使用 html API(不是 dart:html)来解析和过滤数据。如何使用 Flutter 解析 HTML 属性中的“标题”数据并将其显示在列表视图中?我真的很感谢你的帮助。谢谢。

这是我解析数据的Flutter代码,带有cmets的代码是我已经尝试过的代码。

    setState(() {
      document = parse(response.data);
      //elements = document.getElementsByClassName('samu');
      //elements = document.getElementsByTagName('a');
      elements = document.querySelectorAll("td.subject > a.samu");
      //elements = elements.toString();
    });
  }

这是我创建 Listview 的代码

Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('크롤링 리스트'),
        ),
        body:
            //Text(_text));
            ListView.builder(
          itemCount: elements.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text('${elements[index]}'),
            );
          },
        ));
  }

这是我要解析的 HTML 代码。我想过滤(或获取)“标题”部分的数据。在我使用的 HTML 源代码中,有很多数据无用数据使用“标题”,但我需要的所有数据都关联在“samu”类中。

       <td class="subject"> <a href="javascript:void(0);" class="samu" onclick="fnView('BBSMSTR_000000012758', '19151090'); " title="title 1">
                title 1</a>

【问题讨论】:

  • 这个html代码是从elements[index]获取的,是字符串形式的吗?
  • 我是通过DIO获取的,如果需要的话可以转成字符串的形式。

标签: flutter dart html-parsing


【解决方案1】:

您可以在解析 html 之前提取title。 假设response.data 返回一个&lt;td&gt;....&lt;/td&gt; html 列表。您必须迭代每个 &lt;td&gt;...&lt;/td&gt; 并提取标题。

例如, 假设您得到的列表如下:

"data": [
    "<td>...</td>",
    "<td>...</td>",
    ...
    "<td>...</td>",
]

只需迭代每个元素并使用下面的getTitle 方法提取标题。

String getTitle(String html) {
  // html = '''<td class="subject"> <a href="javascript:void(0);" class="samu" onclick="fnView('BBSMSTR_000000012758', '19151090'); " title="title 1">
  //          title 1</a>'''
  if(html.contains('title=')) {
    html = html.substring(html.indexOf('title='));
    html = html.substring(6, html.indexOf('>'));
    html = html.replaceAll('"', '');
    print(html); // Prints title 1
  }
  return html;
}

【讨论】:

  • 非常感谢您真诚的解决方案,但我有一些问题没有解决。在这个过程中,我必须解析多个“标题”数据,并且该响应 AJAX 中有一些“标题”数据是无用的。如何过滤无用数据并提取多个数据?我在这个响应文件中需要的数据在“samu”类下。而且你知道有没有什么方法可以在“document.querySelectorAll”查询到“title”数据后提取它?
  • 我猜“无用”是指空字符串还是null 字符串?如果是这种情况,我们将不得不将title 存储在一个列表中并从中删除无用的title。此外,如果您粘贴从document.querySelectorAll 获得的数据,这将非常有帮助
  • 我明白了...非常感谢您的帮助。
  • 欢迎,伙计。您可以投票或接受答案,以便其他用户了解此答案对您有帮助。
  • 你好。我接受了你的回答,但由于我的声誉,我不能投票给你。很抱歉。
猜你喜欢
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多