Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пономарев В. А..docx
Скачиваний:
18
Добавлен:
01.04.2015
Размер:
561.06 Кб
Скачать

§ 2.6. Использование сценариев dso для отображения экономического xml документа

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

В HTML 6 представлена HTML-страница, содержащая этап сценария.

<HTML>

<HEAD>

<TITLE>Game Finder</TITLE>

</HEAD>

<BODY>

<XML ID="dsogames" SRC="games big.xml"></XML>

<H2>Поиск игры</H2>

Название: <INPUT TYPE="TEXT" ID="SearchText">&nbsp

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

<HR>

Результат:<P>

<DIV ID=ResultDiv></DIV>

<SCRIPT LANGUAGE="JavaScript">

function Findgame ()

{

SearchString = SearchText.value.toUpperCase();

if (SearchString == "")

{

ResultDiv.innerHTML = "&ltВведите название игры в меню "

+ "'Название' &gt";

return;

}

dsogames.recordset.moveFirst();

ResultHTML = "";

while (!dsogames.recordset.EOF)

{

TitleString = dsogames.recordset("NAME").value;

if (TitleString.toUpperCase().indexOf(SearchString)

>=0)

ResultHTML += "<I>"

+ dsogames.recordset("NAME")

+ "</I>, "

+ "<B>"

+ dsogames.recordset("AUTHOR")

+ "</B>, "

+ dsogames.recordset("GENRE")

+ ", "

+ dsogames.recordset("YEAR")

+ " год, "

+ dsogames.recordset("PLATFORM")

+ "<P>";

dsogames.recordset.moveNext();

}

if (ResultHTML == "")

ResultDiv.innerHTML = "&ltигра не найдена&gt";

else

ResultDiv.innerHTML = ResultHTML;

}

</SCRIPT>

</BODY>

</HTML>

HTML 6. games find.html

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

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

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

<BUTTON ONCLICK='Findgame()'>Search</BUTTON>

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

Рис. 5

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

<SCRIPT LANGUAGE="JavaScript">

function Findgames ()

{

SearchString = SearchText.value.toUpperCase();

if (SearchString == "")

{

ResultDiv.innerHTML = "&ltВведите название игры в меню "

+ "'Название' &gt";

return;

}

dsogames.recordset.moveFirst();

ResultHTML = "";

while (!dsogames.recordset.EOF)

{

TitleString = dsogames.recordset("NAME").value;

if (TitleString.toUpperCase().indexOf(SearchString)

>=0)

ResultHTML += "<I>"

+ dsogames.recordset("NAME")

+ "</I>, "

+ "<B>"

+ dsogames.recordset("AUTHOR")

+ "</B>, "

+ dsogames.recordset("GENRE")

+ ", "

+ dsogames.recordset("YEAR")

+ " год, "

+ dsogames.recordset("PLATFORM")

+ "<P>";

dsogames.recordset.moveNext();

}

if (ResultHTML == "")

ResultDiv.innerHTML = "&ltигра не найдена&gt";

else

ResultDiv.innerHTML = ResultHTML;

}

</SCRIPT>

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

SearchString = SearchText.value.toUpperCase();

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

if (SearchString == "")

{

ResultDiv.innerHTML = "&ltВведите название игры в меню "

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

return;

}

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

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

dsogames.recordset.moveFirst();

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

ResultHTML = "";

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

while (!dsogames.recordset.EOF)

{

TitleString = dsogames.recordset("NAME").value;

if (TitleString.toUpperCase().indexOf(SearchString)

>=0)

ResultHTML += "<I>"

+ dsogames.recordset("NAME")

+ "</I>, "

+ "<B>"

+ dsogames.recordset("AUTHOR")

+ "</B>,

+ dsogames.recordset("GENRE")

+ ", "

+ dsogames.recordset("YEAR")

+ " pages, "

+ dsogames.recordset("PLATFORM")

+ "<P>";

dsogames.recordset.moveNext();

}

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

TitleString = dsogames.recordset("NAME").value;

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

TitleString = dsogames.recordset.fields("NAME").value;

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

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

if (TitleString.toUpperCase().indexOf(SearchString)

>=0)

ResultHTML += "<I>"

+ dsogames.recordset("NAME")

+ "</I>, "

+ "<B>"

+ dsogames.recordset("AUTHOR")

+ "</B>,

+ dsogames.recordset("GENRE")

+ ", "

+ dsogames.recordset("YEAR")

+ " pages, "

+ dsogames.recordset("PLATFORM")

+ "<P>";

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

if (ResultHTML == "")

ResultDiv.innerHTML = "&ltигра не найдена&gt ";

else

ResultDiv.innerHTML = ResultHTML;

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