From 6d8401b7781a9e549be9c94bb71a25ce236497ee Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 9 Apr 2024 22:37:08 +0300 Subject: [PATCH] =?UTF-8?q?WEB=20APP:=20=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=20-=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B8=D0=BF=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20XML-=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20(name,=20caption,=20parent)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/utils.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/core/utils.js b/app/core/utils.js index 32ebd4c..1ca71b9 100644 --- a/app/core/utils.js +++ b/app/core/utils.js @@ -66,6 +66,15 @@ const XML_ALWAYS_ARRAY_PATH_PATTERNS = [ //Типовой постфикс тега для массива (при переводе XML -> JSON) const XML_ALWAYS_ARRAY_POSTFIX = "__SYSTEM__ARRAY__"; +//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON) +const XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [ + /(.*)XCOLUMNS_DEF.name$/, + /(.*)XCOLUMNS_DEF.caption$/, + /(.*)XCOLUMNS_DEF.parent$/, + /(.*)XGROUPS.name$/, + /(.*)XGROUPS.caption$/ +]; + //----------- //Тело модуля //----------- @@ -102,16 +111,24 @@ const xml2JSON = ({ xmlDoc, isArray, transformTagName, tagValueProcessor, attrib parseAttributeValue: true, attributeNamePrefix: "" }; - if (useDefaultPatterns) + if (useDefaultPatterns) { opts.isArray = (name, jPath, isLeafNode, isAttribute) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined); - else if (isArray) opts.isArray = isArray; + opts.attributeValueProcessor = (name, val, jPath) => + XML_ATTR_ALWAYS_STR_PATH_PATTERNS.some(pattern => pattern.test(`${jPath}.${name}`)) + ? undefined + : attributeValueProcessor + ? attributeValueProcessor(name, val, jPath) + : val; + } else { + if (isArray) opts.isArray = isArray; + if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor; + } if (transformTagName) opts.transformTagName = transformTagName; if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor; - if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor; const parser = new XMLParser(opts); resolve(parser.parse(xmlDoc)); } catch (e) {