From bfadf35c403a27000c63c28ac717621233836548 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 8 Dec 2020 18:48:55 +0700 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20xmlParser,=20=D0=BE=D1=82=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/sax.js | 8 ++-- .../{Reader/BookConverter => }/xmlParser.js | 43 ++++++++++++++----- 2 files changed, 37 insertions(+), 14 deletions(-) rename server/core/{Reader/BookConverter => }/xmlParser.js (72%) diff --git a/server/core/sax.js b/server/core/sax.js index 5f5c1535..07b5a550 100644 --- a/server/core/sax.js +++ b/server/core/sax.js @@ -294,13 +294,13 @@ function getAttrsSync(tail, lowerCase = true) { if (lowerCase) name = name.toLowerCase(); if (name != '') { - const fullname = name; + const fn = name; let ns = ''; - if (fullname.indexOf(':') >= 0) { - [ns, name] = fullname.split(':'); + if (fn.indexOf(':') >= 0) { + [ns, name] = fn.split(':'); } - result[name] = {value, ns, fullname}; + result[name] = {value, ns, fn}; } name = ''; value = ''; diff --git a/server/core/Reader/BookConverter/xmlParser.js b/server/core/xmlParser.js similarity index 72% rename from server/core/Reader/BookConverter/xmlParser.js rename to server/core/xmlParser.js index 23c384e7..94b9a31f 100644 --- a/server/core/Reader/BookConverter/xmlParser.js +++ b/server/core/xmlParser.js @@ -1,8 +1,8 @@ -const sax = require('../../sax'); +const sax = require('./sax'); -function formatXml(parsedXml, textFilterFunc) { - let out = ''; - out += formatXmlNode(parsedXml, textFilterFunc); +function formatXml(xmlParsed, encoding = 'utf-8', textFilterFunc) { + let out = ``; + out += formatXmlNode(xmlParsed, textFilterFunc); return out; } @@ -68,6 +68,9 @@ function parseXml(xmlString, lowerCase = true) { }; const onStartNode = (tag, tail, singleTag, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars + if (tag == '?xml') + return; + const newNode = {_n: tag, _p: node}; if (tail) { @@ -77,7 +80,7 @@ function parseXml(xmlString, lowerCase = true) { const attrs = {}; for (let i = 0; i < atKeys.length; i++) { const attrName = atKeys[i]; - attrs[parsedAttrs[attrName].fullname] = parsedAttrs[attrName].value; + attrs[parsedAttrs[attrName].fn] = parsedAttrs[attrName].value; } newNode._attrs = attrs; @@ -105,16 +108,36 @@ function parseXml(xmlString, lowerCase = true) { return result; } -function simplifyXml(parsedXml) { -} +function simplifyXmlParsed(node) { + + const simplifyNodeArray = (a) => { + const result = {}; -function desimplifyXml(parsedXml) { + for (let i = 0; i < a.length; i++) { + const child = a[i]; + if (child._n && !result[child._n]) { + result[child._n] = {}; + if (child._a) { + result[child._n] = simplifyNodeArray(child._a); + } + if (child._t) { + result[child._n]._t = child._t; + } + if (child._attrs) { + result[child._n]._attrs = child._attrs; + } + } + } + + return result; + }; + + return simplifyNodeArray([node]); } module.exports = { formatXml, formatXmlNode, parseXml, - simplifyXml, - desimplifyXml + simplifyXmlParsed } \ No newline at end of file