XML字符串语法校验

161 阅读1分钟

what?

接入系统有一个对XML文件进行编辑并保存的功能,现在要对这个xml文本的语法格式进行校验再保存

企业微信截图_17012391646976.png

// 校验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的关闭标签删掉保存会报错

企业微信截图_17012394241.png

学习要点

- XML语法验证
  • XML 文档必须有根元素
  • XML 文档必须有关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性必须加引号
- XML解析