Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

7.11. Проверка валидности xml-документа

Для HTML-страниц, которые были рассмотрены ранее в этой главе, были приняты два допущения:

  • связанный XML-документ не имеет ошибок. Если это не так, XML-данные не будут доступны;

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

Если одно из этих предположений окажется ложным, часть или все данные XML не появятся на странице. Страница проверки на валидность, представленная здесь, демонстрирует, как можно проверить, содержит ли связанный XML-документ ошибки. Можно включить подобную проверку в создаваемые страницы и отображать соответствующее сообщение, если в документе будут найдены ошибки. Страница проверки на валидность также показывает, как сценарий может узнать, загружен ли полностью и обработан XML-документ на тот момент, когда сценарий пытается обратиться к его данным. Хотя в целях упрощения в предыдущих примерах эти действия были опущены, их можно использовать при создании полноценных HTML-страниц.

В Листинге 1.34 представлена страница проверки на валидность.

<HEAD>

<TITLE>Проверка валидности XML-документа</TITLE>

<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">

Document = dsoTest.XMLDocument;

if (Document.readyState == 4)

DisplayError();

else

Document.onreadystatechange = DisplayError;

function DisplayError()

{

if (Document.readyState != 4)

return;

message = "parseError.errorCode: "

+ Document.parseError.errorCode + "\n"

+ "parseError.filepos: "

+ Document.parseError.filepos + "\n"

+ "parseError.line: "

+ Document.parseError.line + "\n"

+ "parseError.linepos: "

+ Document.parseError.linepos + "\n"

+ "parseError.reason: "

+ Document.parseError.reason + "\n"

+ "parseError.srcText: "

+ Document.parseError.srcText + "\n"

+ "parseError.url: "

+ Document.parseError.url;

alert (message);

}

</SCRIPT>

</HEAD>

<BODY>

<!--Установите SRC в URL XML-документа, который вы хотите проверить: -->

<XML ID="dsoTest" SRC="Inventory.xml"></XML>

</BODY>

</HTML>

Листинг 1.34

HTML-страница содержит сценарий, который выполняется, когда браузер первый раз открывает окно страницы:

<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">

/* код сценария... */

</SCRIPT>

Сначала сценарий получает узел Document:

Document = dsoTest.XMLDocument;

Затем он проверяет свойство readyState узла Document. Если значение свойства readyState равно 4, что указывает на то, что все данные XML загружены и обработаны, сценарий сразу же вызывает функцию DisplayError, которая отображает состояние документа на предмет ошибок. Если же значение свойства readyState не равно 4, сценарий присваивает функцию DisplayError свойству onreadystatechange узла Document, что приводит к вызову браузером функции DisplayError позднее, когда значение readyState изменится:

if (Document.readyState == 4)

DisplayError ();

else

Document.onreadystatechange = DisplayError;

Оба этих свойства узла Document описаны в таблице 5.22.

Если свойство readyState еще не приняло значение 4, то функция DisplayError немедленно завершает свою работу. (Она будет вызвана снова, когда в дальнейшем значение readyState станет равным 4.) Если функция продолжает работу, она отображает все свойства элементарного объекта parseError узла Document. Эти свойства полностью описывают состояние XML-документа на предмет ошибок:

function DisplayError()

{

if (Document.readyState != 4)

return;

message = "parseError.errorCode: "

+ Document.parseError.errorCode + "\n"

+ "parseError.filepos: "

+ Document.parseError.filepos + "\n"

+ "parseError.line: "

+ Document.parseError.line + "\n"

+ "parseError.linepos: "

+ Document.parseError.linepos + "\n"

+ "parseError.reason: "

+ Document.parseError.reason + "\n"

+ "parseError.srcText: "

+ Document.parseError.srcText + "\n"

+ "parseError.url: "

+ Document.parseError.url;

alert (message);

}

Если документ не содержит ошибок, значение parseError.errorCode устанавливается в нуль, а другие свойства также имеют нулевые или пустые значения. Если же в документе имеется ошибка, свойство parseError.errorCode содержит числовой код ошибки, а другие свойства описывают эту ошибку. На рисунке 54 показано, как будет выглядеть окно сообщения, если документ не содержит ошибок, а на рисунке 55 показано, как будет выглядеть окно сообщений при наличии ошибок.

Рисунок 54. Окно сообщений, указывающем на отсутствие ошибок в XML-документе

Рисунок 55. Окно сообщений, указывающем на наличие ошибок в XML-документе