in dart parse HTML string to DOM

2019-02-23 03:17发布

In dart,

I want to parse a string "<!DOCTYPE HTMT><html><head></head><body>....</body></html>" to a DOM so that I can manipulate element in the generated DOM. I know in JQuery, there is $.parseHTML to deal with it. But I can not find anything similar in dart. Thank you.

(I have tried html2lib, but the output Document cannot use query(".classname") to select.)

3条回答
Anthone
2楼-- · 2019-02-23 03:26

You can create an element by parsing HTML text:

new Element.html("YOUR HTML STRING HERE");

see Dart: Up and Running CH03

EDIT
You may need to pass a NodeValidator to get the entire text rendered like:

NodeValidator nodeValidator = new NodeValidatorBuilder()
    ..allowTextElements();
    // ..allowHtml5()
    // ..allowElement('Button', attributes: ['ng-disabled']);

new Element.html("YOUR HTML STRING HERE", validator: nodeValidator);

If you run the application you get log messages like "element/attribute xxx removed from ..." if some of the text was not accepted by the NodeValidator.

查看更多
Emotional °昔
3楼-- · 2019-02-23 03:42

Try html5lib. It's 100% pure Dart, so you should be set.

You could also consider an XML parser for Dart like dart-xml depending on the nature of your HTML.

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-02-23 03:43

Check out this article in dart documentation

You can use this for dart

import 'dart:html';

and carryout parsing like this

querySelector('#theid').text = 'Wake up, sleepy head!';
}

In case of flutter, you have to add the "html" package in the pubspec.yaml below the cupertino_icons dependency like this for example

html: ^0.13.3+3

and then the dart file you have to import it like

import 'package:html/parser.dart' as parser;

and then carry out parsing as before but remember to add the alias name before each method!

查看更多
登录 后发表回答