WEB APP: Клиент - реализованы шаблоны по умолчанию для типовых строковых XML-атрибутов (name, caption, parent)

This commit is contained in:
Mikhail Chechnev 2024-04-09 22:37:08 +03:00
parent d8295ccfa3
commit 6d8401b778

View File

@ -66,6 +66,15 @@ const XML_ALWAYS_ARRAY_PATH_PATTERNS = [
//Типовой постфикс тега для массива (при переводе XML -> JSON) //Типовой постфикс тега для массива (при переводе XML -> JSON)
const XML_ALWAYS_ARRAY_POSTFIX = "__SYSTEM__ARRAY__"; 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, parseAttributeValue: true,
attributeNamePrefix: "" attributeNamePrefix: ""
}; };
if (useDefaultPatterns) if (useDefaultPatterns) {
opts.isArray = (name, jPath, isLeafNode, isAttribute) => opts.isArray = (name, jPath, isLeafNode, isAttribute) =>
XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 ||
XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) ||
jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) ||
(isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined); (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 (transformTagName) opts.transformTagName = transformTagName;
if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor; if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;
if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;
const parser = new XMLParser(opts); const parser = new XMLParser(opts);
resolve(parser.parse(xmlDoc)); resolve(parser.parse(xmlDoc));
} catch (e) { } catch (e) {