Подстановка во внешнем теге с пустым блоком
Листинг 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>
.