Skip to content

Commit 2a2c0e5

Browse files
committed
fix(xml parser): Handle whitespace around attribute =
1 parent b4b5b1e commit 2a2c0e5

File tree

2 files changed

+32
-13
lines changed

2 files changed

+32
-13
lines changed

js-libs/easysax/easysax.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ function EasySAXParser() {
263263
continue;
264264
};
265265

266+
if (w===32 || (w > 8 && w<14) ) { // \f\n\r\t\v пробел
267+
continue;
268+
};
269+
266270

267271
if (w !== 61) { // "=" == 61
268272
//console.log('error 2');
@@ -272,7 +276,7 @@ function EasySAXParser() {
272276
break;
273277
};
274278

275-
name = s.substring(i, j);
279+
name = s.substring(i, j).trim();
276280
ok = true;
277281

278282
if (name === 'xmlns:xmlns') {
@@ -282,6 +286,14 @@ function EasySAXParser() {
282286

283287
w = s.charCodeAt(j+1);
284288

289+
while (w = s.charCodeAt(j+1)) {
290+
if (w===32 || (w > 8 && w<14) ) { // \f\n\r\t\v пробел
291+
j++;
292+
} else {
293+
break;
294+
}
295+
}
296+
285297
if (w === 34) { // '"'
286298
j = s.indexOf('"', i = j+2 );
287299

node-tests/test-xml.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
import {assert} from "chai";
2-
import {XmlParser, ParserEvent, ParserEventType} from 'xml';
3-
//import xml = require('xml');
2+
import xml = require('xml');
43

54
describe("xml parser", () => {
6-
it("parses simple element", () => {
7-
let attributes = null;
8-
let element = null;
5+
let last_element = null;
6+
let last_attrs = null;
7+
let parser = null;
98

10-
var parser = new XmlParser(function (event: ParserEvent) {
9+
beforeEach(() => {
10+
parser = new xml.XmlParser(function (event: xml.ParserEvent) {
1111
switch (event.eventType) {
12-
case ParserEventType.StartElement:
13-
element = event.elementName;
14-
attributes = event.attributes;
12+
case xml.ParserEventType.StartElement:
13+
last_element = event.elementName;
14+
last_attrs = event.attributes;
1515
break;
1616
}
1717
});
18+
});
19+
1820

19-
parser.parse("<TextField text='hello' />");
21+
it("handles whitespace around attribute =", () => {
22+
let attributes = null;
23+
let element = null;
2024

21-
assert.equal('TextField', element);
22-
assert.equal('hello', attributes['text']);
25+
parser.parse("<TextField text = \n 'hello' />");
26+
27+
assert.equal('TextField', last_element);
28+
assert.equal('hello', last_attrs['text']);
2329
});
30+
2431
});

0 commit comments

Comments
 (0)