Check for XML errors using JavaScript

前端 未结 5 1643
耶瑟儿~
耶瑟儿~ 2020-12-24 13:36

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

I\'ve seen a page on W3Schools which includes an XML syntax-checker. I don\'t kno

相关标签:
5条回答
  • 2020-12-24 13:53

    Basic xml validator in javscript. This code may not valid for advance xml but basic 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);
    
    0 讨论(0)
  • 2020-12-24 14:14

    Just F12 to enter developer mode and check the source there you can then search validateXML and you are to locate a very long complete XML checker for your reference.

    I am using react and stuff using the DOMParser to present the error message as:

      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');
        }
      }
    
    0 讨论(0)
  • 2020-12-24 14:18

    You can also use the package fast-xml-parser, this package have a validate check for xml files:

    import { validate, parse } from 'fast-xml-parser';
    
    if( validate(xmlData) === true) {
      var jsonObj = parse(xmlData,options);
    }
    
    0 讨论(0)
  • 2020-12-24 14:19

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

    var xmlString = '<a id="a"><b id="b">hey!</b></a>';
    var domParser = new DOMParser();
    var dom = domParser.parseFromString(xmlString, 'text/xml');
    
    // print the name of the root element or error message
    dump(dom.documentElement.nodeName == 'parsererror' ? 'error while parsing' : dom.documentElement.nodeName);
    
    0 讨论(0)
  • 2020-12-24 14:19

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

    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"    
    );
    
    0 讨论(0)
提交回复
热议问题