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

Лабораторная работа №10

  1. Удалите связь с таблицей каскадных стилей из XML-документа, созданного в лабораторной работе №5.

  2. Добавьте к элементу, содержащему данные о фамилии студента, атрибут, указывающий на пол.

  3. Используя способ передачи HTML-разметки, отобразите на HTML-странице полужирным шрифтом содержимое элементов, в которые вложены данные о номерах групп, из XML-документа лабораторной работы №9.

  4. Используя один из способов связывания с HTML-элементами, рядом с номером группы отобразите произвольный графический символ, имя файла которого вложено в элемент вышеуказанного XML-документа.

  5. Используя способы связывания HTML-элементов с XML-атрибутами, отобразите полученный XML-документ на HTML-странице.

  6. Оформите HTML-страницу по согласованию с преподавателем.

  7. Сохраните XML-документ и HTML-страницу в папке под своей фамилией.

  8. Откройте для просмотра созданную HTML-страницу в браузере Internet Explorer.

  9. При появлении сообщений об ошибках, постарайтесь их найти и устранить.

  10. Сдайте работу преподавателю.

6.16. Использование сценариев для dso

В завершении главы познакомимся с примером более сложного сценария, который использует DSO для работы с соответствующим набором записей XML-документа. В примере использованы методы и свойства объекта DSO recordset для поиска книг в документе из листинга 1.1. Приемы, используемые для поиска и отображения данных XML, подходят только для XML-документа, организованного как простой набор записей.

В Листинге 1.26 представлена HTML-страница, содержащая пример сценария.

<HTML>

<HEAD>

<TITLE>Поиск книги</TITLE>

</HEAD>

<BODY>

<XML ID="dsoInventory" SRC="lnventory.xml"></XML>

<H2>Поиск книги</H2>

Текст заголовка: <INPUT TYPE="TEXT" ID="SearchText">&nbsp

<BUTTON ONCLICK="FindBooks()">Поиск</BUTTON>

<HR>

Results:<P>

<DIV ID=ResultDiv></DIV>

<SCRIPT LANGUAGE="JavaScript">

function FindBooks ()

{

SearchString = SearchText.value.toUpperCase();

if (SearchString =="")

{

ResultDiv.innerHTML = "<You must enter text into"

+ "'Title text' box.>";

return;

}

dsoInventory.recordset.moveFirst();

ResultHTML = "";

while (!dsoInventory.recordset.EOF)

{

TitleString = dsoInventory.recordset("TITLE").value;

if(TitleString.toUpperCase().indexOf(SearchString)>=0)

ResultHTML+="<I>"

+ dsoInventory.recordset(TITLE")

+ "</I>, "

+ "<B>"

+ dsoInventory.recordset("AUTHOR")

+ "</B>,"

+ dsoInventory.recordset("BINDING")

+ ","

+ dsoInventory.recordset("PAGES")

+ "pages,"

+ dsoInventory.recordset("PRICE")

+ "<P>";

dsoInventory.recordset.moveNext();

}

if (ResultHTML == "")

ResultDiv.innerHTML = "<Книга не найдена>";

else

ResultDiv.innerHTML = ResultHTML;

}

</SCRIPT>

</BODY>

</HTML>

Листинг 1.26

HTML-страница отображает элемент INPUT типа TEXT, который разрешает пользователю ввести одну строку искомого текста:

<INPUT TYPE="TEXT" ID="SearchText">

Страница также отображает элемент BUTTON (кнопка) с надписью “Поиск”:

<BUTTON ONCLICK='FindBooks()'>Поиск</BUTTON>

Когда пользователь щелкает мышью на кнопке, вызывается функция сценария FindBooks, которая извлекает искомый текст из элемента INPUT и просматривает названия из всех записей BOOK в XML-документе в поисках текста, после чего отображает найденные записи BOOK, содержащие этот текст, как показано на следующем рисунке.

Рисунок 45. Отображение результата поиска книги

Функция FindBooks сценария содержится в элементе SCRIPT и написана на языке JSCRIPT:

<SCRIPT LANGUAGE="JavaScript">

function FindBooks ()

{

SearchString = SearchText.value.toUpperCase();

if (SearchString =="")

{

ResultDiv.innerHTML = "<Вы должны ввести текст в"

+ "поле 'Текст заголовка'.>";

return;

}

dsoInventory.recordset.moveFirst();

ResultHTML = "";

while (!dsoInventory.recordset.EOF)

{

TitleString = dsoInventory.recordset("TITLE").value;

if(TitleString.toUpperCase().indexOf(SearchString)>=0)

ResultHTML+="<I>"

+ dsoInventory.recordset(TITLE")

+ "</I>, "

+ "<B>"

+ dsoInventory.recordset("AUTHOR")

+ "</B>, "

+ dsoInventory.recordset("BINDING")

+ ", "

+ dsoInventory.recordset("PAGES")

+ " страниц, "

+ dsoInventory.recordset("PRICE")

+ "<P>";

dsoInventory.recordset.moveNext();

}

if (ResultHTML == "")

ResultDiv.innerHTML = "<Книга не найдена>";

else

ResultDiv.innerHTML = ResultHTML;

}

</SCRIPT>

Сначала функция FindBooks получает текст, введенный через элемент INPUT (он имеет атрибут ID SearchText), а затем использует метод toUpperCase JScript для преобразования символов текста в прописные буквы. (Функция FindBooks преобразует текст в прописные, чтобы поиск осуществлялся без учета регистра.)

SearchString = SearchText.value.toUpperCase();

Если пользователь не ввел текст в поле INPUT, функция отображает сообщение и завершает свою работу:

if (SearchString =="")

{

ResultDiv.innerHTML = "<Вы должны ввести текст в"

+ "поле 'Текст заголовка'.>";

return;

}

ResultDiv есть идентификатор ID элемента DIV в нижней части страницы, который отображает результаты поиска. Присвоение текста (который может включать HTML-разметку) свойству innerHTML элемента DIV приводит к отображению этого текста (с учетом всей содержащейся в нем HTML-разметки).

Далее функция делает текущей первую запись XML, используя метод recordset.moveFirst, который был описан ранее:

dsoInventory.recordset.moveFirst();

Затем она очищает строковую переменную, используемую для хранения HTML-разметки найденных результатов (ResultHTML):

ResultHTML="";

После этого функция FindBooks выполняет цикл просмотра всех записей в XML-документе. Для анализа момента завершения цикла при достижении конца файла используется свойство recordset.EOF, а для перехода к новой записи используется метод recordset.moveNext:

while (!dsoInventory.recordset.EOF)

{

TitleString = dsoInventory.recordset("TITLE").value;

if(TitleString.toUpperCase().indexOf(SearchString)>=0)

ResultHTML+="<I>"

+ dsoInventory.recordset(TITLE")

+ "</I>, "

+ "<B>"

+ dsoInventory.recordset("AUTHOR")

+ "</B>, "

+ dsoInventory.recordset("BINDING")

+ ", "

+ dsoInventory.recordset("PAGES")

+ " страниц, "

+ dsoInventory.recordset("PRICE")

+ "<P>";

dsoInventory.recordset.moveNext();

}

В начале цикла функция получает значение поля TITLE для текущей записи:

TitleString = dsoInventory.recordset("TITLE").value;

Выражение справа от знака равенства представляет собой краткую нотацию вызова свойства fields объекта recordset. Полная нотация выглядит следующим образом:

TitleString = dsoInventory.recordset.fields("TITLE").value;

Свойство fields содержит множество всех полей, принадлежащих текущей записи. Чтобы получить доступ к определенному полю, следует поместить в скобках имя этого поля, и будет получено его содержимое как строка, через свойство value, добавленное в конце выражения.

Далее в цикле используется метод indexOf JScript для анализа, содержит ли название в текущей записи искомый текст. Если искомый текст обнаружен, код внутри оператора if добавляет к строке ResultHTML текст и HTML-разметку, требуемую для отображения текущей записи:

if(TitleString.toUpperCase().indexOf(SearchString)>=0)

ResultHTML+="<I>"

+ dsoInventory.recordset(TITLE")

+ "</I>, "

+ "<B>"

+ dsoInventory.recordset("AUTHOR")

+ "</B>, "

+ dsoInventory.recordset("BINDING")

+ ", "

+ dsoInventory.recordset("PAGES")

+ " страниц, "

+ dsoInventory.recordset("PRICE")

+ "<P>";

По выходу из цикла функция назначает HTML-разметку, содержащую результаты, свойству innerHTML элемента DIV в разделе BODY документа, который используется для отображения этих результатов (данный элемент DIV имеет идентификатор ResultDiv):

if (ResultHTML == "")

ResultDiv.innerHTML = "<Книга не найдена>";

else

ResultDiv.innerHTML = ResultHTML;

Элемент DIV воспринимает HTML-разметку и сразу же отображает результаты.