Blame view

node_modules/htmlparser2/README.md 4.01 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  # htmlparser2
  
  [![NPM version](http://img.shields.io/npm/v/htmlparser2.svg?style=flat)](https://npmjs.org/package/htmlparser2)
  [![Downloads](https://img.shields.io/npm/dm/htmlparser2.svg?style=flat)](https://npmjs.org/package/htmlparser2)
  [![Build Status](http://img.shields.io/travis/fb55/htmlparser2/master.svg?style=flat)](http://travis-ci.org/fb55/htmlparser2)
  [![Coverage](http://img.shields.io/coveralls/fb55/htmlparser2.svg?style=flat)](https://coveralls.io/r/fb55/htmlparser2)
  
  A forgiving HTML/XML/RSS parser. The parser can handle streams and provides a callback interface.
  
  ## Installation
  	npm install htmlparser2
  
  A live demo of htmlparser2 is available [here](http://demos.forbeslindesay.co.uk/htmlparser2/).
  
  ## Usage
  
  ```javascript
  var htmlparser = require("htmlparser2");
  var parser = new htmlparser.Parser({
  	onopentag: function(name, attribs){
  		if(name === "script" && attribs.type === "text/javascript"){
  			console.log("JS! Hooray!");
  		}
  	},
  	ontext: function(text){
  		console.log("-->", text);
  	},
  	onclosetag: function(tagname){
  		if(tagname === "script"){
  			console.log("That's it?!");
  		}
  	}
  }, {decodeEntities: true});
  parser.write("Xyz <script type='text/javascript'>var foo = '<<bar>>';</ script>");
  parser.end();
  ```
  
  Output (simplified):
  
  ```
  --> Xyz
  JS! Hooray!
  --> var foo = '<<bar>>';
  That's it?!
  ```
  
  ## Documentation
  
  Read more about the parser and its options in the [wiki](https://github.com/fb55/htmlparser2/wiki/Parser-options).
  
  ## Get a DOM
  The `DomHandler` (known as `DefaultHandler` in the original `htmlparser` module) produces a DOM (document object model) that can be manipulated using the [`DomUtils`](https://github.com/fb55/DomUtils) helper.
  
  The `DomHandler`, while still bundled with this module, was moved to its [own module](https://github.com/fb55/domhandler). Have a look at it for further information.
  
  ## Parsing RSS/RDF/Atom Feeds
  
  ```javascript
  new htmlparser.FeedHandler(function(<error> error, <object> feed){
      ...
  });
  ```
  
  Note: While the provided feed handler works for most feeds, you might want to use  [danmactough/node-feedparser](https://github.com/danmactough/node-feedparser), which is much better tested and actively maintained.
  
  ## Performance
  
  After having some artificial benchmarks for some time, __@AndreasMadsen__ published his [`htmlparser-benchmark`](https://github.com/AndreasMadsen/htmlparser-benchmark), which benchmarks HTML parses based on real-world websites.
  
  At the time of writing, the latest versions of all supported parsers show the following performance characteristics on [Travis CI](https://travis-ci.org/AndreasMadsen/htmlparser-benchmark/builds/10805007) (please note that Travis doesn't guarantee equal conditions for all tests):
  
  ```
  gumbo-parser   : 34.9208 ms/file ± 21.4238
  html-parser    : 24.8224 ms/file ± 15.8703
  html5          : 419.597 ms/file ± 264.265
  htmlparser     : 60.0722 ms/file ± 384.844
  htmlparser2-dom: 12.0749 ms/file ± 6.49474
  htmlparser2    : 7.49130 ms/file ± 5.74368
  hubbub         : 30.4980 ms/file ± 16.4682
  libxmljs       : 14.1338 ms/file ± 18.6541
  parse5         : 22.0439 ms/file ± 15.3743
  sax            : 49.6513 ms/file ± 26.6032
  ```
  
  ## How does this module differ from [node-htmlparser](https://github.com/tautologistics/node-htmlparser)?
  
  This is a fork of the `htmlparser` module. The main difference is that this is intended to be used only with node (it runs on other platforms using [browserify](https://github.com/substack/node-browserify)). `htmlparser2` was rewritten multiple times and, while it maintains an API that's compatible with `htmlparser` in most cases, the projects don't share any code anymore.
  
  The parser now provides a callback interface close to [sax.js](https://github.com/isaacs/sax-js) (originally targeted at [readabilitySAX](https://github.com/fb55/readabilitysax)). As a result, old handlers won't work anymore.
  
  The `DefaultHandler` and the `RssHandler` were renamed to clarify their purpose (to `DomHandler` and `FeedHandler`). The old names are still available when requiring `htmlparser2`, your code should work as expected.