Самоучитель по SQL-сервер в Linux



Включение файлов с разделителями

Во многих динамических web-сайтах предусмотрена функция публикации содержимого файлов с разделителями (например, файла headlines с сайта Linux Today) в некотором формате, фильтруемом на программном уровне. Реализация таких фильтров обычно меняется от страницы к странице и от сайта к сайту, а для извлечения данных и их последующей сборки в удобном формате используются довольно сложные алгоритмы.

В LXP для отображения таких файлов используется тег <indude> с атрибутом method="parsed". Содержимое файла разбивается на серию последовательных значений, доступ к которым осуществляется при помощи универсального тега LXP <field>.

Информационные блоки разделяются значением, передаваемым в атрибуте del i mi ter. Внутри блока поля отделяются друг от друга символами новой строки (\п). Необязательный атрибут separator позволяет выбрать другой разделитель полей.

Метод parsed тега <include> требует закрывающего тега </include>, поскольку для каждого блока, который LXP читает из файла, происходит возврат к начальному тегу <include> с повторным выполнением перечисленных действий вплоть до обработки последнего блока.

Если вы захотите ограничить количество отображаемых блоков, задайте номер последнего блока при помощи атрибута lastblock. Кроме того, атрибут firstblock позволяет пропустить несколько начальных блоков (скажем, блок комментариев, который может находиться в начале текстового файла до первого разделителя).

Пример файла с разделителями с сайта www.linuxtoday.com:

Welcome to lthead.txt. Fields are delimited by two ampersands.

The first field is the headline. The second field is the URL to the story.

The third field is the date the story was posted.

Have Fun! (webmaster@linuxtoday.com)

&&

LinuxProgramming: python-dev summary 2001-06-21 - 2001-07-05 http://linuxtoday.com/news_story.php3?ltsn=2001-07-05-019-21-OS-SW

Jul 5. 2001. 21:30:38

&&

Chicago Sun-Times: Test drive Linux using friendly tryout software

http://linuxtoday.com/news_story.php3?ltsn=2001-07-05-018-21-PS-CY

Jul 5. 2001, 21:00:48

&&

[...]

Фрагмент, приведенный в листинге 13.23, открывает файл /home/web/headlines/ lthead.txt и разбивает его на блоки. В качестве разделителя блоков используется последовательность символов &&.

Листинг 13.23. Включение файла с разделителями

<1хр>

<include src="/home/web/headlines/lthead.txt" delimiter="&&"

firstblock="2" lastblock="4" method="parsed">

<table border="0" cellspacing="l"><tr>

<td bgcolor="#ffffff" width="100r> <div class="content">

- <field />

</div>

</td>

</tr>

<tr>

<td bgcolor="#eOeOe8" width="100r> <strong>

<field type="url" link="Read More..." target="_blank" />

</strong>

<br/>

</td>

</tr>

</table>

</include>

</lxp>

При обработке этого фрагмента теги <field> заполняются результатами разбора блоков. Поля присваиваются тегам <field> в порядке нахождения.

Как видно из листинга 13.23, в теге <f ield> можно определить дополнительный атрибут type. При включении разделенных файлов этот атрибут может принимать значения hidden (значение поля не выводится в выходных данных) и url.

Тип hidden назначается полям, пропускаемым при разборе файла. Поскольку в файлах с разделителями не предусмотрена идентификация блоков по именам, все поля обрабатываются LXP в порядке их следования в исходном файле. Чтобы исключить некоторое поле из вывода, вы назначаете ему атрибут type="hidden" — это позволяет продолжить вывод со следующего поля.

Тип url обычно используется в тех случаях, если поле заведомо содержит URL-адрес. Вместо простого вывода текста создается гипсрссылка по заданному URL-адресу (при помощи тега HTML <a>). Вместо URL-адреса текст сгенерированной гиперссылки можно заменить любым текстом по своему усмотрению (в листинге 13.23 использовался текст «Read More...»), для этого в теге <field> достаточно задать атрибут link.

Пример выходных данных LXP после разбора фрагмента, приведенного в листинге 13.23:

<table border="0" cellspacing="l"><tr>

<td bgcolor="#ffffff" width="100%>

<div class="content">

- LinuxProgramming: python-dev summary 2001-06-21 - 2001-07-05

</div>

</td>

</tr>

</tr>

<td bgcolor="#e0e0e8" width="100%>

<strong>

<a href="http://linuxtoday.com/news_story.php3?ltsn= 2001-07-05-019-21-OS-SW"

target="_blank">Read More...</a>

</strong><br/>

</td>

</tr></table>

<table border="0" cellspacing="l"><tr>

<td bgcolor="#ffffff" width="100%>

<div class="content">

- Chicago Sun-Times: Test drive Linux using friendly tryout software

</div>

</td>

</tr><tr>

<td bgcolor="#e0e0e8" width="100r>

<strong>

<a href='1http://linuxtoday.com/news_story.php3?ltsn=2001-07-05-018-21-PS-CY"

target="_blank">Read More...</a>

</strong><br />

</td>

</tr></table>

[...]

ПРИМЕЧАНИЕ

В теге LXP <field type="url "> можно передавать внешние (по отношению к LXP) атрибуты, такие как class или target. Эти атрибуты включаются в сгенерированный тег <а>.


Книжный магазин