quaka, для проверки существования единичных узлов используется свойство node() - оно возвращает true если узел существует.
Например, для следующего xml
<?xml version="1.0" encoding="utf-8"?>
<shop id="1" current_group_id="586">
<user_id>0</user_id>
<name>Демонстрационный магазин</name>
<description></description>
<path>/shop/</path>
<site_id>1</site_id>
<shop_image_small_max_width>100</shop_image_small_max_width>
<shop_image_big_max_width>800</shop_image_big_max_width>
<shop_image_small_max_height>100</shop_image_small_max_height>
<shop_image_big_max_height>800</shop_image_big_max_height>
<structure_id>42</structure_id>
<shop_country_id>175</shop_country_id>
<shop_currency id="1">
<shop_currency_name>руб.</shop_currency_name>
<shop_currency_international_name>RUR</shop_currency_international_name>
<shop_currency_value_in_basic_currency>1.000000</shop_currency_value_in_basic_currency>
<shop_currency_is_default>1</shop_currency_is_default>
</shop_currency>
<tags>
<tag id="69">
<tag_name>Ardo</tag_name>
<tag_description></tag_description>
<tag_path_name>Ardo</tag_path_name>
<count>2</count>
</tag>
<tag id="65">
<tag_name>Ariston</tag_name>
<tag_description></tag_description>
<tag_path_name>Ariston</tag_path_name>
<count>2</count>
</tag>
<tag id="87">
<tag_name>Ballu</tag_name>
<tag_description></tag_description>
<tag_path_name>Ballu</tag_path_name>
<count>1</count>
</tag>
<tag id="52">
<tag_name>BBK</tag_name>
<tag_description></tag_description>
<tag_path_name>BBK</tag_path_name>
<count>2</count>
</tag>
<tag id="73">
<tag_name>BEKO</tag_name>
<tag_description></tag_description>
<tag_path_name>BEKO</tag_path_name>
<count>2</count>
</tag>
<tag id="62">
<tag_name>Bosch</tag_name>
<tag_description></tag_description>
<tag_path_name>Bosch</tag_path_name>
<count>3</count>
</tag>
<tag id="16">
<tag_name>Canon</tag_name>
<tag_description></tag_description>
<tag_path_name>Canon</tag_path_name>
<count>3</count>
</tag>
<tag id="58">
<tag_name>Cowon</tag_name>
<tag_description></tag_description>
<tag_path_name>Cowon</tag_path_name>
<count>1</count>
</tag>
<tag id="82">
<tag_name>Delonghi</tag_name>
<tag_description></tag_description>
<tag_path_name>Delonghi</tag_path_name>
<count>1</count>
</tag>
</tags>
</shop>
проверка
<xsl:if test="/shop/user_id/node()"> узел существует </xsl:if>
выведет сообщение "узел существует", а проверка
<xsl:if test="/shop/unknown/node()"> узел существует </xsl:if>
не выведет ничего, потому что у узла shop нет дочернего узла с названием unknown.
Если узел существует, иногда бывает еще полезно проверить что его значение не равно нулю или что в нем есть хоть какой-то текст.
Примеры:
<xsl:if test="/shop/user_id/node() and /shop/user_id > 0"> узел существует и его значение больше нуля </xsl:if>
<xsl:if test="/shop/name/node() and /shop/name != ''"> узел существует и в нем есть текст</xsl:if>
Если нужно проверить существование некоего множества узлов, то самый простой способ сделать это - посчитать их количество. Для этого используется функция count(), (хотя надо заметить что подсчет это весьма затратая функция, и в некоторых случаях способна снизить скорость генерации странички, но мы сейчас не будем на этом останавливаться).
Пример: следующий код, примененый к тому же xml который я привел выше
<xsl:if test="count(/shop/tags/tag) > 0"> есть хотя бы одна метка </xsl:if>
выведет сообщение "есть хотя бы одна метка".
А этот код
<xsl:if test="count(/shop/item) > 0"> есть хотя бы один товар </xsl:if>
не выведет ничего, потому что в приведенном (исключительно для примера!) xml нет ни одного товара.
Вот как-то так...