|
|
@@ -103,6 +103,7 @@ const XML_EXPORT_BASE = (() => {
|
|
|
* @return {void}
|
|
|
* */
|
|
|
function Element(name, attrs) {
|
|
|
+ handleXMLEntity(attrs);
|
|
|
this.name = name;
|
|
|
let checkData = check(name, attrs);
|
|
|
this.fail = checkData.failHints;
|
|
|
@@ -111,6 +112,40 @@ const XML_EXPORT_BASE = (() => {
|
|
|
_cache.failList.push(...this.fail);
|
|
|
}
|
|
|
/*
|
|
|
+ * xml字符实体的处理,这些特殊字符不处理会导致xml文件格式出错:""、<>、&
|
|
|
+ * 要先处理&
|
|
|
+ * */
|
|
|
+ let _xmlEntity = {
|
|
|
+ '&': '&',
|
|
|
+ '\n': '
',
|
|
|
+ '"': '"',
|
|
|
+ '\'': ''',
|
|
|
+ '<': '<',
|
|
|
+ '>': '>'
|
|
|
+ };
|
|
|
+ // 对每个元素的所有属性值进行特殊字符处理
|
|
|
+ function handleXMLEntity(attrs) {
|
|
|
+ for (let attr of attrs) {
|
|
|
+ // 值统一转换成String
|
|
|
+ attr.value = !isDef(attr.value) ? '' : String(attr.value);
|
|
|
+ if (!attr.value) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (let [key, value] of Object.entries(_xmlEntity)) {
|
|
|
+ attr.value = attr.value.replace(new RegExp(key, 'g'), value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 获取处理实体字符后的数据
|
|
|
+ function getParsedData(arr) {
|
|
|
+ return arr.map(data => {
|
|
|
+ for (let [key, value] of Object.entries(_xmlEntity)) {
|
|
|
+ data = data.replace(new RegExp(key, 'g'), value);
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /*
|
|
|
* 检查
|
|
|
* 创建节点时检查节点的数据
|
|
|
* 1.长度限制minLen,maxLen
|
|
|
@@ -123,7 +158,7 @@ const XML_EXPORT_BASE = (() => {
|
|
|
let rst = {failHints: [], filterAttrs: []};
|
|
|
let dateReg = /([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))/;
|
|
|
for (let data of datas) {
|
|
|
- data.value = typeof data.value === 'undefined' || data.value === null ? '' : String(data.value);
|
|
|
+ //data.value = typeof data.value === 'undefined' || data.value === null ? '' : String(data.value);
|
|
|
if (data.whiteSpace && data.whiteSpace === WHITE_SPACE.COLLAPSE) { //处理空格相关
|
|
|
data.value = data.value.replace(/[\r,\n,\t]/g, ' ');
|
|
|
data.value = data.value.trim();
|
|
|
@@ -459,14 +494,16 @@ const XML_EXPORT_BASE = (() => {
|
|
|
}
|
|
|
// 设置完工程编号后,更新原始数据的工程编号
|
|
|
function setupCode(originalDatas, codeDatas, {Tender, Engineering}) {
|
|
|
+ // 转换xml实体字符
|
|
|
+ let parsedCodeDatas = getParsedData(codeDatas);
|
|
|
originalDatas.forEach(orgData => {
|
|
|
let curIdx = 0;
|
|
|
let engs = _getNodeFromSrc(orgData.data, Engineering);
|
|
|
engs.forEach(eng => {
|
|
|
- eng.attrs.find(attr => attr.name === '编号').value = codeDatas[curIdx++];
|
|
|
+ eng.attrs.find(attr => attr.name === '编号').value = parsedCodeDatas[curIdx++];
|
|
|
let tenders = _getNodeFromSrc(eng, Tender);
|
|
|
tenders.forEach(tender => {
|
|
|
- tender.attrs.find(attr => attr.name === '编号').value = codeDatas[curIdx++];
|
|
|
+ tender.attrs.find(attr => attr.name === '编号').value = parsedCodeDatas[curIdx++];
|
|
|
});
|
|
|
});
|
|
|
});
|