dart中html转换为文本的输出

dart里面没有现成的html转为text的功能,jsoup有现成的功能,可是无法移植到ios上,而且比较重,实在不值得折腾,基于dart的html库,手撸了一个html转换为text的处理

  1. class PlaintextVisitor extends TreeVisitor {
  2. final StringBuffer _str;
  3.  
  4. PlaintextVisitor() : _str = StringBuffer();
  5.  
  6. String toString() => _str.toString();
  7.  
  8. visitDocument(dom.Document node) {
  9. visitChildren(node);
  10. }
  11.  
  12. visitDocumentType(dom.DocumentType node) {
  13. visitChildren(node);
  14. }
  15.  
  16. visitText(dom.Text node) {
  17. if (node.text=="\n")
  18. return;
  19. writeTextNodeAsHtml(_str, node);
  20. }
  21.  
  22. visitElement(dom.Element node) {
  23. final tag = node.localName;
  24. if (tag=="li")
  25. _str.write("\n * ");
  26. else if (tag=="dt")
  27. _str.write(" ");
  28. else if (tag=="p" || tag== "h1" || tag== "h2" || tag=="h3" || tag== "h4" || tag== "h5" || tag=="tr")
  29. _str.write("\n");
  30. if (node.nodes.isNotEmpty) {
  31. visitChildren(node);
  32. } else if (isVoidElement(tag)) {
  33. return;
  34. }
  35. if (tag=="br" || tag== "dd" || tag=="dt" || tag== "p" || tag== "h1" || tag== "h2" || tag== "h3" || tag== "h4" || tag== "h5")
  36. _str.write("\n");
  37. }
  38.  
  39. }
  40. 用法
  41. import 'package:html/parser.dart' show parse;
  42. import 'package:html/dom.dart' as dom;
  43. import 'package:html/dom_parsing.dart';
  44.  
  45. var document = parse(
  46. htmlString);
  47. plaintext=(PlaintextVisitor()..visit(document)).toString();