Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Использование сценариев для 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 = "&lt;You must enter text into"

+ "'Title text' box.&gt;";

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 = "&lt;Книга не найдена&gt;";

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 = "&lt;Вы должны ввести текст в"

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

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 = "&lt;Книга не найдена&gt;";

else

ResultDiv.innerHTML = ResultHTML;

}

</SCRIPT>

 

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

 

SearchString = SearchText.value.toUpperCase();

 

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

if (SearchString =="")

{

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

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

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 = "&lt;Книга не найдена&gt;";

else

ResultDiv.innerHTML = ResultHTML;

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

 



Просмотров 860

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!