Иллюстрированный самоучитель по PostgreSQL

Внешние теги

В некоторых ситуациях переменные LXP требуется использовать в контексте тегов HTML. Предположим, у вас имеется графическое изображение с динамически изменяемой шириной. Помните, что LXP выполняет подстановку только в теrax LXP, а в тегах HTML это сделать не удастся. Иначе говоря, ссылка на переменную Swidth в следующем фрагменте не работает:

<lхр>
<! --ОШИБКА: Подстановка переменных LXP во внешних тегах невозможна -->
<img src="/images/spacer.gif" width="$width" />
</lxp>

Напрашивается очевидное решение – подставить тег LXP <putvar> внутрь тега HTML. Тем не менее у такого подхода имеется существенный недостаток. Дело в том, что такие синтаксические конструкции нарушают целостность разметки в документе. В языках разметки правильно оформленный документ означает недопустимость вложения тегов в содержимое других тегов, как в следующем фрагменте:

<lхр>
<! --Подобное вложение тегов не рекомендуется -->
<img src=:'/irnages/spacer.gif" widtn="<putvar name="width" />">
<lхр>

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

Для решения подобных проблем в LXP был введен тег <xtag>. Этот тег выполняет функции "оболочки" для отображения внешних тегов (то есть тегов, не являющихся тегами LXP). У тега <xtag> имеется один обязательный атрибут xname, который определяет тег, заменяющий <xtag> при обработке LXP. Например, тег <xtag xname="a"> отображается в виде тега <а>.

Необязательный атрибут xappend позволяет присоединить произвольную строку к концу сгенерированного тега. Например, атрибут xappend=" checked" в теге флажка HTML создает тег <input type="checkbox" checked>.

Все остальные атрибуты передаются внешнему тегу без изменений. Отчасти именно это обстоятельство объясняет полезность тега <xtag>, поскольку переменные, подставленные в <xtag>, автоматически подставляются в полученный внешний тег. В качестве примера в листинге 13.31 приведен правильный способ оформления тега HTML <img> в LXP.

Листинг 13.31. Подстановка во внешнем теге с пустым блоком.

<lхр>
<xtag xname-"img" src="images/spacer.gif" width="$width" />
</lxp>

Результат выполнения этого фрагмента в документе LXP (предполагается, что переменной width присвоено значение 10):

<img src="images/spacer/gif" width="10" />

Обратите внимание на завершающий символ / в теге <xtag>. Тег <xtag> может быть открывающим, закрывающим пли тегом с пустым блоком в зависимости от того, какой тег в конечном счете требуется вывести. Важнейшая особенность этих тегов заключается в том, что LXP отслеживает все "незакрытые" теги <xtag> и выбирает соответствующее имя тега при достижении закрывающего тега </xtag>.

Если тег <xtag> создается для внешнего тега с пустым блоком (например, для тега HTML <img>), вы обязаны оформить <xtag> в виде тега с пустым блоком и завершающим символом /.

В противном случае LXP примет ближайший закрывающий тег </xtag> за парный тег последнего открывающего тега <xtag> (в нашем случае – <img>), что приведет к неверному сопоставлению тегов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.