| // Copyright (c) project authors. All rights reserved. | |
| // Licensed under the MIT license. | |
| // See LICENSE file in the project root for details. | |
| import 'package:html/dom.dart'; | |
| import 'package:html/dom_parsing.dart'; | |
| import 'package:html/parser.dart'; | |
| void main(List<String> args) { | |
| var document = parse(''' | |
| <body> | |
| <h2>Header 1</h2> | |
| <p>Text.</p> | |
| <h2>Header 2</h2> | |
| More text. | |
| <br/> | |
| </body>'''); | |
| // outerHtml output | |
| print('outer html:'); | |
| print(document.outerHtml); | |
| print(''); | |
| // visitor output | |
| print('html visitor:'); | |
| _Visitor().visit(document); | |
| } | |
| // Note: this example visitor doesn't handle things like printing attributes and | |
| // such. | |
| class _Visitor extends TreeVisitor { | |
| String indent = ''; | |
| @override | |
| void visitText(Text node) { | |
| if (node.data.trim().isNotEmpty) { | |
| print('$indent${node.data.trim()}'); | |
| } | |
| } | |
| @override | |
| void visitElement(Element node) { | |
| if (isVoidElement(node.localName)) { | |
| print('$indent<${node.localName}/>'); | |
| } else { | |
| print('$indent<${node.localName}>'); | |
| indent += ' '; | |
| visitChildren(node); | |
| indent = indent.substring(0, indent.length - 2); | |
| print('$indent</${node.localName}>'); | |
| } | |
| } | |
| @override | |
| void visitChildren(Node node) { | |
| for (var child in node.nodes) { | |
| visit(child); | |
| } | |
| } | |
| } |