Шифрование и секретность в Linux


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



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

<1хр>

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

</lxp>

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

<1mg src="images/spacer/gif" width="10" />

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

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

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

<1хр>

<xtag xname="table" width="$table_w1dth">

<tr>

<-- ОШИБКА: тег с пустым блоком должен заканчиваться символом / -->



<td>
<xtag xname="img" src="images/spacer.gif" w1dth="$width">
</td>

</tr>

</xtag>

</lxp>

В этом фрагменте используются три тега <xtag>
. Два из них (открывающий и закрывающий) относятся к тегу <table>
, а третий (открывающий) инкапсулирует тег <img>
. Поскольку в HTML тег <img>
не имеет парного завершающего тега, этот тег <tag>
должен быть тегом с пустым блоком, но LXP не воспринимает его в этом качестве (обратите внимание на отсутствие завершающего символа /). Проблема заключается в следующем: LXP помнит о существовании открытого элемента <xtag>
и при достижении первого закрывающего тега </xtag>
считает, что закрывается не Ter<table>
, а тег<img>
.

Если переменная table_width равна 100, а неременная width равна 10, неправильный результат будет выглядеть так:

<table width="100">

<tr>

<-- ОШИБКА: тег с пустым блоком должен заканчиваться символом / -->

<td>
<img src="images/spacer.g1f" w1dth="10">
</td>

</tr>

</img>

В листинге 13.32 приведена правильная комбинация тегов <xtag>
.



Содержание раздела