@rgrove/parse-xml 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -31
- package/dist/browser.js +692 -300
- package/dist/browser.js.map +4 -4
- package/dist/global.min.js +9 -8
- package/dist/global.min.js.map +4 -4
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/Parser.d.ts +53 -6
- package/dist/lib/Parser.d.ts.map +1 -1
- package/dist/lib/Parser.js +166 -126
- package/dist/lib/Parser.js.map +1 -1
- package/dist/lib/StringScanner.d.ts +15 -21
- package/dist/lib/StringScanner.d.ts.map +1 -1
- package/dist/lib/StringScanner.js +63 -86
- package/dist/lib/StringScanner.js.map +1 -1
- package/dist/lib/XmlDeclaration.d.ts +30 -0
- package/dist/lib/XmlDeclaration.d.ts.map +1 -0
- package/dist/lib/XmlDeclaration.js +36 -0
- package/dist/lib/XmlDeclaration.js.map +1 -0
- package/dist/lib/XmlDocument.d.ts +4 -2
- package/dist/lib/XmlDocument.d.ts.map +1 -1
- package/dist/lib/XmlDocument.js.map +1 -1
- package/dist/lib/XmlDocumentType.d.ts +37 -0
- package/dist/lib/XmlDocumentType.d.ts.map +1 -0
- package/dist/lib/XmlDocumentType.js +39 -0
- package/dist/lib/XmlDocumentType.js.map +1 -0
- package/dist/lib/XmlElement.js.map +1 -1
- package/dist/lib/XmlError.d.ts +24 -0
- package/dist/lib/XmlError.d.ts.map +1 -0
- package/dist/lib/XmlError.js +52 -0
- package/dist/lib/XmlError.js.map +1 -0
- package/dist/lib/XmlNode.d.ts +20 -1
- package/dist/lib/XmlNode.d.ts.map +1 -1
- package/dist/lib/XmlNode.js +28 -3
- package/dist/lib/XmlNode.js.map +1 -1
- package/dist/lib/syntax.d.ts.map +1 -1
- package/dist/lib/syntax.js +18 -23
- package/dist/lib/syntax.js.map +1 -1
- package/dist/lib/types.d.ts +2 -2
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +20 -23
- package/src/index.ts +3 -0
- package/src/lib/Parser.ts +228 -141
- package/src/lib/StringScanner.ts +66 -103
- package/src/lib/XmlDeclaration.ts +58 -0
- package/src/lib/XmlDocument.ts +4 -2
- package/src/lib/XmlDocumentType.ts +67 -0
- package/src/lib/XmlError.ts +80 -0
- package/src/lib/XmlNode.ts +33 -3
- package/src/lib/syntax.ts +12 -18
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Or, if you like living dangerously, you can load [the minified bundle](https://u
|
|
|
38
38
|
|
|
39
39
|
## Not Features
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
While this parser is capable of parsing document type declarations (`<!DOCTYPE ... >`) and including them in the node tree, it doesn't actually do anything with them. External document type definitions won't be loaded, and the parser won't validate the document against a DTD or resolve custom entity references defined in a DTD.
|
|
42
42
|
|
|
43
43
|
In addition, the only supported character encoding is UTF-8 because it's not feasible (or useful) to support other character encodings in JavaScript.
|
|
44
44
|
|
|
@@ -149,64 +149,79 @@ Also, it was fun.
|
|
|
149
149
|
|
|
150
150
|
## Benchmark
|
|
151
151
|
|
|
152
|
-
Here's how parse-xml stacks up against
|
|
152
|
+
Here's how parse-xml's performance stacks up against a few comparable libraries:
|
|
153
|
+
|
|
154
|
+
- [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser), which claims to be the fastest pure JavaScript XML parser
|
|
155
|
+
- [libxmljs2](https://github.com/marudor/libxmljs2), which is based on the native libxml library written in C
|
|
156
|
+
- [xmldoc](https://github.com/nfarina/xmldoc), which is based on [sax-js](https://github.com/isaacs/sax-js)
|
|
153
157
|
|
|
154
158
|
While libxmljs2 is faster at parsing medium and large documents, its performance comes at the expense of a large C dependency, no browser support, and a [history of security vulnerabilities](https://www.cvedetails.com/vulnerability-list/vendor_id-1962/product_id-3311/Xmlsoft-Libxml2.html) in the underlying libxml2 library.
|
|
155
159
|
|
|
160
|
+
In these results, "ops/s" refers to operations per second. Higher is faster.
|
|
161
|
+
|
|
156
162
|
```
|
|
157
|
-
Node.js
|
|
163
|
+
Node.js v22.10.0 / Darwin arm64
|
|
158
164
|
Apple M1 Max
|
|
159
165
|
|
|
160
166
|
Running "Small document (291 bytes)" suite...
|
|
161
167
|
Progress: 100%
|
|
162
168
|
|
|
163
|
-
@rgrove/parse-xml 4.
|
|
164
|
-
|
|
169
|
+
@rgrove/parse-xml 4.2.0:
|
|
170
|
+
253 082 ops/s, ±0.16% | fastest
|
|
171
|
+
|
|
172
|
+
fast-xml-parser 4.5.0:
|
|
173
|
+
127 232 ops/s, ±0.44% | 49.73% slower
|
|
165
174
|
|
|
166
|
-
libxmljs2 0.
|
|
167
|
-
|
|
175
|
+
libxmljs2 0.35.0 (native):
|
|
176
|
+
68 709 ops/s, ±2.77% | slowest, 72.85% slower
|
|
168
177
|
|
|
169
|
-
xmldoc 1.
|
|
170
|
-
|
|
178
|
+
xmldoc 1.3.0 (sax-js):
|
|
179
|
+
122 345 ops/s, ±0.15% | 51.66% slower
|
|
171
180
|
|
|
172
|
-
Finished
|
|
173
|
-
Fastest: @rgrove/parse-xml 4.
|
|
174
|
-
Slowest:
|
|
181
|
+
Finished 4 cases!
|
|
182
|
+
Fastest: @rgrove/parse-xml 4.2.0
|
|
183
|
+
Slowest: libxmljs2 0.35.0 (native)
|
|
175
184
|
|
|
176
185
|
Running "Medium document (72081 bytes)" suite...
|
|
177
186
|
Progress: 100%
|
|
178
187
|
|
|
179
|
-
@rgrove/parse-xml 4.
|
|
180
|
-
1
|
|
188
|
+
@rgrove/parse-xml 4.2.0:
|
|
189
|
+
1 350 ops/s, ±0.18% | 29.5% slower
|
|
181
190
|
|
|
182
|
-
|
|
183
|
-
|
|
191
|
+
fast-xml-parser 4.5.0:
|
|
192
|
+
560 ops/s, ±0.48% | slowest, 70.76% slower
|
|
184
193
|
|
|
185
|
-
|
|
186
|
-
|
|
194
|
+
libxmljs2 0.35.0 (native):
|
|
195
|
+
1 915 ops/s, ±2.64% | fastest
|
|
187
196
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
197
|
+
xmldoc 1.3.0 (sax-js):
|
|
198
|
+
824 ops/s, ±0.20% | 56.97% slower
|
|
199
|
+
|
|
200
|
+
Finished 4 cases!
|
|
201
|
+
Fastest: libxmljs2 0.35.0 (native)
|
|
202
|
+
Slowest: fast-xml-parser 4.5.0
|
|
191
203
|
|
|
192
204
|
Running "Large document (1162464 bytes)" suite...
|
|
193
205
|
Progress: 100%
|
|
194
206
|
|
|
195
|
-
@rgrove/parse-xml 4.
|
|
196
|
-
|
|
207
|
+
@rgrove/parse-xml 4.2.0:
|
|
208
|
+
109 ops/s, ±0.17% | 40.11% slower
|
|
209
|
+
|
|
210
|
+
fast-xml-parser 4.5.0:
|
|
211
|
+
48 ops/s, ±0.55% | slowest, 73.63% slower
|
|
197
212
|
|
|
198
|
-
libxmljs2 0.
|
|
199
|
-
|
|
213
|
+
libxmljs2 0.35.0 (native):
|
|
214
|
+
182 ops/s, ±1.16% | fastest
|
|
200
215
|
|
|
201
|
-
xmldoc 1.
|
|
202
|
-
|
|
216
|
+
xmldoc 1.3.0 (sax-js):
|
|
217
|
+
73 ops/s, ±0.50% | 59.89% slower
|
|
203
218
|
|
|
204
|
-
Finished
|
|
205
|
-
Fastest: libxmljs2 0.
|
|
206
|
-
Slowest:
|
|
219
|
+
Finished 4 cases!
|
|
220
|
+
Fastest: libxmljs2 0.35.0 (native)
|
|
221
|
+
Slowest: fast-xml-parser 4.5.0
|
|
207
222
|
```
|
|
208
223
|
|
|
209
|
-
See the [parse-xml-benchmark](https://github.com/rgrove/parse-xml-benchmark) repo for instructions on
|
|
224
|
+
See the [parse-xml-benchmark](https://github.com/rgrove/parse-xml-benchmark) repo for instructions on how to run this benchmark yourself.
|
|
210
225
|
|
|
211
226
|
## License
|
|
212
227
|
|