what?
接入系统有一个对XML文件进行编辑并保存的功能,现在要对这个xml文本的语法格式进行校验再保存
// 校验XML语法
const verifyXML = () => {
return new Promise((resolve,reject) => {
let xmlString = jsonData.value
// 浏览器兼容处理,chrome
if (window.DOMParser) {
let parser = new DOMParser();
let xmlDoc ,err,errorMessage
try{
xmlDoc = parser.parseFromString(xmlString,"text/xml");
err = xmlDoc.getElementsByTagName("parsererror")
} catch(error) {
// TODO解析错误处理
reject()
}
if(err.length > 0){//<parsererror>标签,该元素只会出现在解析错误的地方
errorMessage = xmlDoc.documentElement.childNodes[0].childNodes[1].innerText;
KuiMessage({
title: '',
message: errorMessage,
type: 'error'
})
reject()
} else {
resolve()
}
}
// Internet Explorer
else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(xmlString);
if(xmlDoc.parseError.errorCode != 0)
{
errorMessage="错误code: " + xmlDoc.parseError.errorCode + "\n";
errorMessage=errorMessage+"错误原因: " + xmlDoc.parseError.reason;
errorMessage=errorMessage+"错误位置: " + xmlDoc.parseError.line;
reject()
}
else{
resolve()
}
}
})
}
const saveCode = () => {
verifyXML().then(() => {
console.log("保存成功!")
})
}
result
测试一下把rule的关闭标签删掉保存会报错
学习要点
- XML语法验证
- XML 文档必须有根元素
- XML 文档必须有关闭标签
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- XML 属性必须加引号