xml-twig 1.0.6 → 1.1.1
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 +85 -88
- package/doc/twig.md +187 -144
- package/package.json +3 -2
- package/{demo → samples}/memory-test.js +3 -2
- package/samples/sample.js +88 -0
- package/{demo → samples}/speed-test.js +4 -3
- package/twig.js +164 -187
- package/demo/demo.js +0 -18
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
+
"sax": "^1.3.0",
|
|
3
4
|
"xml-writer": "^1.7.0"
|
|
4
5
|
},
|
|
5
6
|
"name": "xml-twig",
|
|
6
7
|
"description": "Node module for processing huge XML documents in tree mode",
|
|
7
|
-
"version": "1.
|
|
8
|
+
"version": "1.1.1",
|
|
8
9
|
"main": "twig.js",
|
|
9
10
|
"directories": {
|
|
10
11
|
"doc": "doc"
|
|
11
12
|
},
|
|
12
13
|
"devDependencies": {
|
|
14
|
+
"jsdoc-to-markdown": "^8.0.0",
|
|
13
15
|
"luxon": "^2.1.1",
|
|
14
|
-
"sax": "^1.3.0",
|
|
15
16
|
"node-expat": "^2.4.0"
|
|
16
17
|
},
|
|
17
18
|
"scripts": {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const process = require('process');
|
|
3
|
+
const twig = require('xml-twig');
|
|
3
4
|
|
|
4
5
|
let NE = 0;
|
|
5
6
|
console.log('Starting...')
|
|
6
|
-
let parser =
|
|
7
|
-
let reader = fs.createReadStream(`${__dirname}
|
|
7
|
+
let parser = twig.createParser([{ tag: 'subsession', function: anyHandler }], { method: 'expat' })
|
|
8
|
+
let reader = fs.createReadStream(`${__dirname}/20231019015552.1-MSRAN.xml`);
|
|
8
9
|
reader.pipe(parser);
|
|
9
10
|
|
|
10
11
|
function anyHandler(elt) {
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const twig = require('../twig.js');
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Sample 1.1
|
|
6
|
+
function rootHandler(elt) {
|
|
7
|
+
console.log(`<${elt.name}> finished after ${parser.currentLine} lines`);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
parser = twig.createParser({ tag: twig.Root, function: rootHandler }, { method: 'sax' })
|
|
11
|
+
fs.createReadStream(`${__dirname}/bookstore.xml`).pipe(parser)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
// Sample 1.2
|
|
15
|
+
parser = twig.createParser({ tag: twig.Root, function: rootHandler }, { method: 'expat' })
|
|
16
|
+
/parser.write('<html><head><title>Hello World</title></head><body><p>Foobar</p></body></html>');
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// Sample 2
|
|
20
|
+
parser = twig.createParser({ tag: twig.Root, event: 'rootElement' }, { method: 'sax' })
|
|
21
|
+
fs.createReadStream(`${__dirname}/bookstore.xml`).pipe(parser)
|
|
22
|
+
|
|
23
|
+
parser.on('rootElement', (elt) => {
|
|
24
|
+
console.log(`<${elt.name}> finished after ${parser.currentLine} lines`);
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
// Sample 3
|
|
30
|
+
function bookHandler(elt) {
|
|
31
|
+
console.log(`${elt.attr("category")} ${elt.name} at line ${parser.currentLine}`)
|
|
32
|
+
elt.purge() // -> without `purge()` the entire XML document will be loaded into memory
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
handle_book = [
|
|
36
|
+
{ tag: 'book', function: bookHandler },
|
|
37
|
+
{ tag: 'ebook', function: bookHandler }
|
|
38
|
+
];
|
|
39
|
+
handle_book = [
|
|
40
|
+
{ tag: /book$/, function: bookHandler }
|
|
41
|
+
];
|
|
42
|
+
handle_book = [{
|
|
43
|
+
tag: function (name, elt) { return name.endsWith('book') },
|
|
44
|
+
function: bookHandler
|
|
45
|
+
}];
|
|
46
|
+
handle_book = [{
|
|
47
|
+
tag: function (name, elt) { return ['book', 'ebook'].includes(name) },
|
|
48
|
+
function: bookHandler
|
|
49
|
+
}];
|
|
50
|
+
handle_book = [{
|
|
51
|
+
tag: function (name, elt) { return ['book', 'ebook'].includes(elt.name) },
|
|
52
|
+
function: bookHandler
|
|
53
|
+
}];
|
|
54
|
+
|
|
55
|
+
parser = twig.createParser(handle_book, { method: 'sax' })
|
|
56
|
+
fs.createReadStream(`${__dirname}/bookstore.xml`).pipe(parser)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
// Sample 4
|
|
61
|
+
function anyHandler(elt) {
|
|
62
|
+
console.log(`${' '.repeat(elt.level)}${elt.name} => "${elt.text ?? ''}" at line ${parser.currentLine}`)
|
|
63
|
+
elt.purge() // -> without `purge()` the entire XML document will be loaded into memory
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
parser = twig.createParser({ tag: twig.Any, function: anyHandler })
|
|
67
|
+
// or with Regular Expression: `{ tag: tag: /i/, function: anyHandler }`
|
|
68
|
+
// or with Function: `{ tag: () => {return true}, function: anyHandler }`
|
|
69
|
+
fs.createReadStream(`${__dirname}/bookstore.xml`).pipe(parser)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// Sample 5
|
|
73
|
+
const handle_ebook = [
|
|
74
|
+
{ tag: 'ebook', function: ebookHandler },
|
|
75
|
+
{ tag: twig.Root, function: rootHandler }
|
|
76
|
+
];
|
|
77
|
+
const parser = twig.createParser(handle_ebook, { partial: true })
|
|
78
|
+
fs.createReadStream(`${__dirname}/bookstore.xml`).pipe(parser);
|
|
79
|
+
|
|
80
|
+
function ebookHandler(elt) {
|
|
81
|
+
//console.log(`${elt.name} at line ${parser.currentLine}`)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function rootHandler(elt) {
|
|
85
|
+
console.log( elt.writer(' ').toString() );
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
const { DateTime } = require('luxon');
|
|
2
|
-
const startTime = DateTime.now();
|
|
3
2
|
const fs = require('fs');
|
|
3
|
+
const twig = require('xml-twig');
|
|
4
4
|
|
|
5
5
|
let NE = 0;
|
|
6
|
+
const startTime = DateTime.now();
|
|
6
7
|
console.log('Starting...')
|
|
7
|
-
let parser =
|
|
8
|
-
let reader = fs.createReadStream(`${__dirname}
|
|
8
|
+
let parser = twig.createParser([{ tag: 'subsession', function: anyHandler }], { method: 'expat' })
|
|
9
|
+
let reader = fs.createReadStream(`${__dirname}/20231019015552.1-MSRAN.xml`);
|
|
9
10
|
reader.pipe(parser);
|
|
10
11
|
|
|
11
12
|
function anyHandler(elt) {
|