Два вопроса по xslt

#
Два вопроса по xslt
Здравствуйте!
Подскажите, пожалуйста, ответы на два вопроса (на форуме не нашел):
1. Как вывести ссылку вида site/skin/cart.png на файл (изображение) в XSL шаблоне?
2. Как создать такое условие: если элемент property_dir не содержит дочерний элемент property, то шаблон не выводится?

Заранее благодарю за помощь!
Модератор
#
Re: Два вопроса по xslt
1.
<a href="/skin/cart.png">бла бла бла</a>

2.
<xsl:if test="count(property_dir/property) = 0">
...
</xsl:if>
#
Re: Re: Два вопроса по xslt
Спасибо огромное!

Но вот по второму вопросу:

У меня в XML выводится группа доп свойств:
<property_dir id="5">
         <parent_id>0</parent_id>
         <name>Название группы</name>
         <description></description>
         <sorting>0</sorting>
         <user_id>20</user_id>
      </property_dir>

В этой группе нет элементов. Выводится только название. Сейчас в XSL:
<!-- Дополнительные свойства -->
                  <xsl:if test="count(property_value)">
                     <xsl:apply-templates select="/shop/shop_item_properties/property_dir"/>
                  </xsl:if>

<xsl:template match="property_dir">
      <xsl:if test="count(property_dir/property) = 0">
         <h5><xsl:value-of disable-output-escaping="yes" select="name"/></h5>
         <xsl:variable name="dir_id" select="@id" />
         <div class="table-responsive">
            <table class="product-table">
               <xsl:apply-templates select="/shop/shop_item/property_value[property_dir_id = $dir_id]"/>
            </table>
         </div>
      </xsl:if>
   </xsl:template>


Название группы свойств, которая не содержит элементов все-равно выводится. Как сделать, что бы оно не выводилось?
#
Re: Два вопроса по xslt
Цитата:
Название группы свойств, которая не содержит элементов все-равно выводится. Как сделать, что бы оно не выводилось?

та-же проблема
выкрутился вот так:


   <!-- Шаблон группы свойств -->
   <xsl:template match="property_dir">
      <xsl:if test="count(property_dir/property) = 0 ">
            <xsl:variable name="dir_id" select="@id" />
            <xsl:choose>
               <xsl:when test="@id = 10"></xsl:when>
               <xsl:when test="@id = 7"></xsl:when>
               <xsl:when test="@id = 1"></xsl:when>
               <xsl:otherwise>
         <div class="table-responsive">
         <h5><xsl:value-of disable-output-escaping="yes" select="name"/></h5>
            <table class="product-table">
               <xsl:apply-templates select="/shop/shop_item/property_value[property_dir_id = $dir_id] "/>
            </table>
         </div>
               </xsl:otherwise>
            </xsl:choose>
      </xsl:if>
   </xsl:template>


т.е перечислил пустые группы
Может кто подскажет как будет элегантнее
#
Re: Два вопроса по xslt
правда в моем случае я использую в структуре отдельные настройки для каждой группы магазина, но всеравно хотелось бы скрыть те группы которые пустые
#
Re: Два вопроса по xslt
Может кто подскажет как ограничить вывод допсвойства имеем:
<!-- Шаблон группы свойств -->
   <xsl:template match="property_dir">
      <xsl:if test="count(property_dir/property) >= 0 ">
         <xsl:variable name="dir_id" select="@id" />
         <xsl:choose>
            <xsl:when test="@id = 9"></xsl:when>
            <xsl:when test="@id = 7"></xsl:when>
            <xsl:when test="@id = 1"></xsl:when>
            
            <xsl:otherwise>
               <div class="table-responsive">
                  <h2><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
                  <table id="tab_ob">
                     <xsl:apply-templates select="/shop/shop_item/property_value[property_dir_id = $dir_id] "/>
                  </table>
               </div>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:if>
   </xsl:template>

Далее описываем шаблон групп допсвойств
<xsl:template match="/shop/shop_item/property_value">
      
      <xsl:if test="value/node() and value != '' or file/node() and file != ''">
         
         <xsl:variable name="property_id" select="property_id" />
         <xsl:variable name="property" select="/shop/shop_item_properties//property[@id=$property_id]" />
         
         <tr><td class="tab_ob_inf"><xsl:value-of disable-output-escaping="yes" select="$property/name"/></td><td>
               <xsl:choose>
                  <xsl:when test="$property/type = 2">
                     <a href="{../dir}{file}" target="_blank"><xsl:value-of disable-output-escaping="yes" select="file_name"/></a>
                  </xsl:when>
                  <xsl:when test="$property/type = 7">
                     <xsl:if test="value = 0">
                        <img src="/images/delete.png"/>
                     </xsl:if>
                     
                     <xsl:if test="value = 1">
                        <img src="/images/check.gif"/>
                     </xsl:if>
                     
                  </xsl:when>
                  <xsl:when test="$property[tag_name='balcony']">
                  <xsl:apply-templates select="/shop/shop_item/property_value[tag_name='balcony']" mode="balcony"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <xsl:value-of disable-output-escaping="yes" select="value"/>
                     <!-- Единица измерения свойства -->
                     <xsl:if test="$property/shop_measure/node()">
                        <xsl:text> </xsl:text><xsl:value-of select="$property/shop_measure/name"/>
                     </xsl:if>
                  </xsl:otherwise>
               </xsl:choose>
         </td></tr>
         
      </xsl:if>
   </xsl:template>

и вот тут проблема допсвойство балкон имеет может иметь 1-2, так вот когда оно имеет 2 значения я описал чтоб оно выводилось вот так через дополнительный темплейт

   <xsl:template match="/shop/shop_item/property_value[tag_name='balcony']" mode="balcony">
      
      <xsl:value-of disable-output-escaping="yes" select="value"/><br/><xsl:text></xsl:text>
      
   </xsl:template>

Но как ограничить вывод? т.е. на сайте свойство выводиться 2 раза с одними и теми-же значениями
Цитата:


Характеристики объекта
Площадь общая   56 кв.м
Площадь жилая   32 кв.м
Площадь кухни   7 кв.м
Балкон/лоджия   Балкон Лоджия
Тип санузла   раздельный
Количество комнат   2
Балкон/лоджия   Балкон Лоджия

#
Re: Два вопроса по xslt
Сортируем свойства в группе свойств

<xsl:template match="shop_item">
....
<!-- Выводим группы свойств -->
            <xsl:if test="count(property_value)">
               <xsl:apply-templates select="/shop/shop_item_properties/property_dir"/>
            </xsl:if>
....
</xsl:template>

далее

<!-- Шаблон группы свойств -->
   <xsl:template match="property_dir">
      <xsl:if test="count(property_dir/property) >= 0 ">
         <xsl:variable name="dir_id" select="@id" />

                  <h2><xsl:value-of disable-output-escaping="yes" select="name"/></h2>
                  <table id="tab_ob">
                     <xsl:apply-templates select="/shop/shop_item_properties//property[property_dir_id = $dir_id]"/>
                  </table>
               </div>
      </xsl:if>
   </xsl:template>

ниже

<xsl:template match="property">
      <xsl:variable name="property_id" select="@id" />
      <xsl:if test="/shop/shop_item/property_value[property_id = $property_id]/value/node() and /shop/shop_item/property_value[property_id = $property_id]/value != '' or /shop/shop_item/property_value[property_id = $property_id]/type != 2">

            <xsl:apply-templates select="/shop/shop_item/property_value[property_id = $property_id]" />

      </xsl:if>
</xsl:template>

ну и сами свойства
   <!-- Вывод строки со значением свойства -->
   <xsl:template match="/shop/shop_item/property_value">
      
      
      <xsl:if test="value/node() and value != '' or file/node() and file != ''">
         
         <xsl:variable name="property_id" select="property_id" />
         <xsl:variable name="property" select="/shop/shop_item_properties//property[@id=$property_id]" />
         
         <tr><td class="tab_ob_inf"><xsl:value-of disable-output-escaping="yes" select="$property/name"/></td><td>
               
               <xsl:choose>
                  
                  <xsl:when test="$property/type = 7">
                     <xsl:if test="value = 0">
                        <img src="/images/delete.png"/>
                     </xsl:if>
                     
                     <xsl:if test="value = 1">
                        <img src="/images/check.gif"/>
                     </xsl:if>
                  </xsl:when>
                  
                  
                  <xsl:otherwise>
                     <xsl:value-of disable-output-escaping="yes" select="value"/>
                     <!-- Единица измерения свойства -->
                     <xsl:if test="$property/shop_measure/node()">
                        <xsl:text> </xsl:text><xsl:value-of select="$property/shop_measure/name"/>
                     </xsl:if>
                     
                  </xsl:otherwise>
               </xsl:choose>
         </td></tr>
      </xsl:if>
      
      
   </xsl:template>
Авторизация