Опубликован: 24.01.2007 | Уровень: для всех | Доступ: платный
Лекция 9:

Отображение XML-документов с использованием сценариев объектной модели документа

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

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

Как использовать страницу проверки на валидность

  1. В вашем текстовом редакторе откройте страницу проверки на валидность Validity Test.htm. (См. Листинг 9.10 далее.)
  2. Отредактируйте фрагмент данных в разделе BODY страницы, чтобы атрибуту SRC было присвоено URL XML-документа, который вы хотите подвергнуть тестированию. Например, чтобы протестировать документ Raven.xml, вы должны отредактировать фрагмент данных следующим образом:
    <XML ID="dsoTest" SRC="Raven.xml"></XML>
  3. Воспользуйтесь командой Save (Сохранить) вашего текстового редактора, чтобы сохранить модифицированную страницу.
  4. Откройте страницу в Internet Explorer 5.

Страница отобразит окно сообщения, содержащее информацию о первой ошибке, обнаруженной XML-процессором Internet Explorer 5. На рисунке 9.9 показано как будет выглядеть окно сообщения, если документ не содержит ошибок.


Рис. 9.9.

А на рисунке 9.10 показано как оно будет выглядеть при наличии ошибки.


Рис. 9.10.

Как работает страница проверки на валидность

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

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

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

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

<!-- Имя файла: Validity Test.htm -->

<HTML>

<HEAD>
   <TITLE>Validity Tester</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>

<!--Set SRC to the URL of the XML document you want to check: -->
<XML ID="dsoTest" SRC="Inventory.xml"></XML>

</BODY>

</HTML>
Листинг 9.10. Validity Test.htm

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 описаны в таблице 9.3.

Если свойство 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 содержит числовой код ошибки, а другие свойства описывают эту ошибку.

Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Максим Самсоненко
Максим Самсоненко
Россия
Алексей Шибаев
Алексей Шибаев
Россия, г. Новошахтинск