使用JavaScript检查XML错误

时间:2011-06-13 17:47:36

标签: javascript xml dom

问题:如何在现代浏览器中对XML进行语法检查(IE以外的任何其他内容)?

我见过a page on W3Schools,其中包含一个XML语法检查程序。我不知道它是如何工作的,但我想知道如何实现同样的行为。

我已经对此事进行过多次搜索(没有成功),我尝试使用DOM Parser检查我的XML是否“格式正确”(也没有成功)。

var xml = 'Caleb';
var parser = new DOMParser();
var doc = parser.parseFromString(xml, 'text/xml');

我希望解析器告诉我我有XML语法错误(即未关闭的名称标记)。但是,它总是返回一个XML DOM对象,就像根本没有错误一样。

总而言之,我想知道如何使用JavaScript自动检查XML文档的语法。

P.S。有没有办法可以针对DTD验证XML文档(使用JS而不是IE)?

5 个答案:

答案 0 :(得分:27)

编辑:这是一个更简洁的示例,来自MDN

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>";
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(sMyString, "text/xml");
// print the name of the root element or error message
dump(oDOM.documentElement.nodeName == "parsererror" ? "error while parsing" : oDOM.documentElement.nodeName);

答案 1 :(得分:4)

上面的NoBugs答案对我来说不适用于当前的Chrome。我建议:

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>";
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(sMyString, "text/xml");
dump(oDOM.getElementsByTagName('parsererror').length ? 
     (new XMLSerializer()).serializeToString(oDOM) : "all good"    
);

答案 2 :(得分:1)

javscript中的基本xml验证器。此代码可能不适用于高级xml,但适用于基本xml。

function xmlValidator(xml){
    // var xml = "<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
    while(xml.indexOf('<') != -1){
        var sub = xml.substring(xml.indexOf('<'), xml.indexOf('>')+1);
        var value = xml.substring(xml.indexOf('<')+1, xml.indexOf('>'));
        var endTag = '</'+value+'>';
        if(xml.indexOf(endTag) != -1){
            // console.log('xml is valid');
            // break;
        }else{
            console.log('xml is in invalid');
            break;
        }
        xml = xml.replace(sub, '');
        xml = xml.replace(endTag, '');
        console.log(xml);
        console.log(sub+' '+value+' '+endTag);
    }
}
var xml = "<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
xmlValidator(xml);

答案 3 :(得分:0)

只需F12进入开发人员模式并检查 source 即可在其中搜索validateXML,然后找到一个非常长的完整 XML检查器供您参考。

我正在使用react,正在使用DOMParser将错误消息显示为:

  handleXmlCheck = () => {
    const { fileContent } = this.state;
    const parser = new window.DOMParser();
    const theDom = parser.parseFromString(fileContent, 'application/xml');
    if (theDom.getElementsByTagName('parsererror').length > 0) {
      showErrorMessage(theDom.getElementsByTagName('parsererror')[0].getElementsByTagName('div')[0].innerHTML);
    } else {
      showSuccessMessage('Valid Xml');
    }
  }

答案 4 :(得分:0)

您还可以使用软件包fast-xml-parser,该软件包具有对xml文件的验证检查:

import { validate, parse } from 'fast-xml-parser';

if( validate(xmlData) === true) {
  var jsonObj = parse(xmlData,options);
}