html - html5lib dart。通过类选择器查询抛出异常

标签 html dart html5lib

我正在尝试通过选择器.nav获取具有nav类的元素。结果lib抛出异常:

only type selectors are implemented.



代码示例:
import 'package:html5lib/parser.dart';

void main() {
  String html = '''
    <html>
    <head><title>Some title</title></head>
    <body>
    <div class="nav">Some nav content</div>
    </body>
    </html>
  ''';
  var doc = parse(html);

  print(doc.query('.nav'));
}

控制台输出:
Breaking on exception: UnimplementedError: only type selectors are implemented
Unhandled exception:
UnimplementedError: only type selectors are implemented
#0      Node._typeSelector (package:html5lib/dom.dart:269:7)
#1      Node.query (package:html5lib/dom.dart:249:62)
#2      main (/home/hello/dart/test/bin/simple_exp.dart:14:18)
#3      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:190)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:93)

怎么了?

最佳答案

尚未实现完全的CSS选择器匹配。

根据您的用例,您可能可以匹配类型(标签名称),然后使用Element的class属性过滤结果。

这是如何执行此操作的示例:

  var el = doc.queryAll('div').where((el) => 
      el.attributes.keys.contains('class') &&
        el.attributes['class'].split(' ').contains('nav')).first;

希望有人会很快实现查询选择器匹配支持-因为这种解决方法对于带有很多div标签的文档来说效率很低。

另一个解决方案是自己遍历-像这样:
queryClass(Node element, String className) {
  for (var node in element.nodes) {
    if (node is! Element) continue;
    if (node.attributes.keys.contains('class') 
        && node.attributes['class'].split(' ').contains(className)) {
      return node;
    }
    var result = queryClass(node, className);
    if (result != null) return result;
  }
  return null;
}

main() {
   var doc = parse(...);
   var el = queryClass(doc, 'nav');
   print(el);
}

关于html - html5lib dart。通过类选择器查询抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316122/

相关文章:

javascript - 我在页脚中有一个社交图标图像,我希望它在悬停时更改其背景颜色

javascript - 如何在准备好时隐藏动态创建的 div?

flutter - 在 showModalBottomSheet 外部单击时如何控制传递给 Navigator.pop() 的内容?

python - Xpath 不匹配

python - 如何在 html5lib 中修复 "unexpected keyword argument ' useChardet'"

python - 禁用 lxml 中 '--' 的注释检查

html - 在 UTF-8 页面中显示拉丁 1 字符

php - 保护服务器上的一个特定文件; .htaccess 有什么好办法吗?

flutter - 如何在Sembast记录中的映射内监听单个值?

dart - 使用 isolate 提高应用程序性能