![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Проверка валидности 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-документе
ТЕМА 8. XSL-ТАБЛИЦЫ СТИЛЕЙ
Подобно таблице каскадных стилей (CSS), рассмотренной в главе 5, XSL-таблица стилей (Extensible Stylesheet Language) связывается с XML-документом и сообщает браузеру, как отображать данные XML. Это позволяет открывать XML-документ непосредственно в браузере без посредничества HTML-страницы. XSL-таблица стилей - мощный и гибкий инструмент для отображения XML-документов, чем CSS-таблица. Используя XSL-таблицы стилей, можно не только задать формат для каждого элемента XML, как при CSS-таблицы, но и обеспечить средства контроля над выводимыми данными. XSL позволяет выбрать те данные XML, которые необходимо отобразить, представить эти данные в любом порядке, свободно модифицировать или добавлять информацию. XSL предоставляет доступ ко всем компонентам XML (элементам, атрибутам, комментарии и инструкции по обработке). Эта таблица позволяет легко сортировать и фильтровать данные XML, дает возможность включать в таблицу стиля сценарии и предоставляет набор полезных методов, которые можно использовать при обработке информации. Базовая форма XSL-таблицы стилей, описываемая в этой главе, избирательно преобразует XML-документ в HTML-страницу, воспринимаемую и отображаемую затем браузером. Получая доступ к богатому арсеналу HTML, к методам преобразования XSL добавляются новые возможности по форматированию и обработке данных. Однако XSL-таблицы являются более сложными для понимания, чем CSS-таблицы. Работа с ними требует знания языка HTML. Кроме того, эта новая технология, поэтому имеет меньшую степень поддержки — меньшую степень унификации среди современных браузеров.
![]() |