Проверьте наличие ошибок XML с помощью JavaScript - PullRequest
18 голосов
/ 13 июня 2011

Вопрос: Как проверить синтаксис моего XML в современных браузерах (кроме IE)?

Я видел страницу в W3Schools , которая включает проверку синтаксиса XML. Я не знаю, как это работает, но я хотел бы знать, как я могу добиться того же поведения.

Я уже провел много поисков по этому вопросу (безуспешно), и я попытался с помощью DOM Parser проверить, правильно ли сформирован мой XML (также безуспешно).

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

Я ожидаю, что синтаксический анализатор скажет мне, что у меня есть синтаксическая ошибка XML (то есть незакрытый тег name ). Однако он всегда возвращает объект XML DOM, как будто ошибок не было вообще.

Подводя итог, я хотел бы знать, как я могу автоматически проверять синтаксис XML-документа, используя JavaScript.

P.S. Можно ли как-нибудь проверить документ XML по DTD (используя JS, а не IE)?

Ответы [ 4 ]

28 голосов
/ 13 июня 2011

Редактировать: вот более краткий пример из 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);
4 голосов
/ 14 февраля 2018

Ответ NoBugs выше не работал с текущим хромом для меня. Я предлагаю:

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"    
);
1 голос
/ 19 февраля 2019

Базовый валидатор xml в javscript.Этот код может быть недействительным для предварительного 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);
0 голосов
/ 22 октября 2018

Просто F12, чтобы войти в режим разработчика и проверить источник , тогда вы можете выполнить поиск 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');
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...