Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Проверка XML на валидность (https://javascript.ru/forum/css-html/13036-proverka-xml-na-validnost.html)

SV0L0CH 13.11.2010 14:54

Проверка XML на валидность
 
(new DOMParser()).parseFromString(xml, "text/xml")
При невалидном содержимом xml вместо того чтобы бросать исключение или возвращать специальное значение (null или undefined, например) возвращает дерево содержащее описание ошибки.
Как эту ситуацию можно исправить?

subzey 13.11.2010 18:47

var xmlDocument = (new DOMParser()).parseFromString("<invalid>", "text/xml");
if (xmlDocument.childNodes[0].namespaceURI == "http://www.mozilla.org/newlayout/xml/parsererror.xml") alert("Ошибка разбора XML")

SV0L0CH 13.11.2010 19:13

Цитата:

Сообщение от subzey
"http://www.mozilla.org/newlayout/xml/parsererror.xml"

Не уверен что это будет кросбраузерно. И вдруг кому-то понадобится обработать XML с описанием ошибки.
Есть более универсальный способ?

Vulkan 13.11.2010 20:13

Google: XML валидатор
результатов много

SV0L0CH 14.11.2010 00:14

Цитата:

Сообщение от Vulkan (Сообщение 79057)
Google: XML валидатор
результатов много

А толку с них?

Vulkan 14.11.2010 08:07

Цитата:

Сообщение от SV0L0CH (Сообщение 79110)
А толку с них?

Ну уверен что Вам нужно сможете подобрать.

subzey 14.11.2010 10:30

SV0L0CH,
Вас смутила мозилла в строке неймспейса?
Это всего лишь токен, описывающий схему xml, к движку браузера он никакого отношения не имеет (под той же оперой работает).
Точно так же, браузеры, кроме амайи, никакого отношения к w3.org не имеют, хотя этот адрес и встречается в доктайпе.

На крайний случай, если эта строка вдруг будет другой, проверить, какой именно, ничего не стоит.

SV0L0CH 14.11.2010 15:38

Цитата:

Сообщение от subzey
На крайний случай, если эта строка вдруг будет другой, проверить, какой именно, ничего не стоит.

В хроме совсем другой формат ошибки
alert((new XMLSerializer).serializeToString((new DOMParser()).parseFromString("<invalid>", "text/xml")));​

Вообще, раз браузер выдаёт ошибку то целесообразно было бы проверять её наличие через браузерное API. Должен же быть какой-нибудь способ :-?

B~Vladi 14.11.2010 17:51

var xml = (new DOMParser()).parseFromString("<invalid>", "text/xml");
if(xml && xml.documentElement && xml.documentElement.tagName != 'parsererror'){
  alert('Ok.');
} else {
  alert('Fuck.');
}


Часовой пояс GMT +3, время: 15:43.