使用 JavaScript 检查 XML 错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6334119/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 21:17:28  来源:igfitidea点击:

Check for XML errors using JavaScript

javascriptxmldom

提问by caleb531

Question:How do I syntax-check my XML in modern browsers (anything but IE)?

问题:如何在现代浏览器(IE 除外)中检查我的 XML 的语法?

I've seen a page on W3Schoolswhich includes an XML syntax-checker. I don't know how it works, but I'd like to know how I may achieve the same behavior.

在 W3Schools 上看到了一个页面,其中包含一个 XML 语法检查器。我不知道它是如何工作的,但我想知道如何实现相同的行为。

I've already performed many searches on the matter (with no success), and I've tried using the DOM Parser to check if my XML is "well-formed" (also with no success).

我已经对此事进行了许多搜索(没有成功),并且我尝试使用 DOM 解析器来检查我的 XML 是否“格式良好”(也没有成功)。

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

I expect the parser to tell me I have an XML syntax error (i.e. an unclosed nametag). However, it always returns an XML DOM object, as if there were no errors at all.

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

To summarize, I would like to know how I can automatically check the syntax of an XML document using JavaScript.

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

P.S. Is there any way I can validate an XML document against a DTD (using JS, and not IE)?

PS 有什么方法可以根据 DTD 验证 XML 文档(使用 JS,而不是 IE)?

回答by NoBugs

Edit: Here is a more concise example, from MDN:

编辑:这是一个更简洁的例子,来自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);

回答by Henryk Gerlach

NoBugs answer above did not work with a current chrome for me. I suggest:

上面的 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"    
);

回答by Hearen

Just F12to enter developer mode and check the sourcethere you can then search validateXMLand you are to locate a very long complete XML checkerfor your reference.

只需F12进入开发人员模式并检查源代码,您就可以搜索validateXML并找到一个非常长的完整XML 检查器供您参考。

I am using reactand stuff using the DOMParserto present the error message as:

我正在使用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');
    }
  }

回答by Muhammad Haroon Iqbal

Basic xml validator in javscript. This code may not valid for advance xml but basic xml.

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);