Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Тэмплэйт для XML tree


Автор: jsse 25.6.2006, 18:35
Поскажите как должен выглядеть темплэйт для следующей структуры XML:

Код


<categories>
    <category name="AAA">
        <category name="BBB">
            <product name="product0" />
        </category>
        <category name="CCC">
            <product name="product1" />
            <product name="product2" />
        </category>
        <product name="product3" />
    </category>
</categories>



на выходе хочу получить:

Код


<select>
    <option>AAA</option>
    <option selected>--BBB</option>
    <option>--CCC</option>     
</select>
product0
<hr />    

<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product1
<hr />    

<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product2
<hr />    

<select>
    <option selected>AAA</option>
    <option>--BBB</option>
    <option>--CCC</option>     
</select>
product3
<hr />    
 

Автор: Beard 25.6.2006, 21:39
Не совсем понятна зависимость - можно поподробней!?
А то первое, что в голову лезет:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
<select>
    <option>AAA</option>
    <option selected>--BBB</option>
    <option>--CCC</option>     
</select>
product0
<hr />    
<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product1
<hr />    
<select>
    <option>AAA</option>
    <option>--BBB</option>
    <option selected>--CCC</option>     
</select>
product2
<hr />    
<select>
    <option selected>AAA</option>
    <option>--BBB</option>
    <option>--CCC</option>     
</select>
product3
<hr />    
    </xsl:template>
</xsl:stylesheet>

smile 

Автор: jsse 25.6.2006, 22:28
категория может иметь подкатегорию. продукты находяться в категории.
все категории необходимо засунуть в select-ы, к подкатегориям ставить префикс "--"

Код

<select>
    <option>CATEGORY1</option>
    <option>CATEGORY2</option>
    <option>--SUBCATEGORY1</option>
    <option>--SUBCATEGORY2</option>
    <option>--SUBCATEGORY...[N]</option>
    <option>CATEGORY...[N]</option>
</select>


productN


и всё это повторять product[N] n-раз, т.е. сколько продуктов столько select-oв.

Добавлено @ 22:35 
Еще выделять <option selected> - ту категорию, в которой находиться product 

Автор: Beard 26.6.2006, 01:05
Ну если я правильно понял, то как-то так:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <xsl:apply-templates select="//product" />
   </xsl:template>

   <xsl:template match="product">
      <xsl:variable name="parent" select=".." />

      <select>
         <xsl:for-each select="/categories/category">
            <option>
               <xsl:if test=".=$parent">
                  <xsl:attribute name="selected" />
               </xsl:if>

               <xsl:value-of select="@name" />
            </option>

            <xsl:for-each select=".//category">
               <option>
                   <xsl:if test=".=$parent">
                      <xsl:attribute name="selected" />
                   </xsl:if>
    
                   --<xsl:value-of select="@name" />
               </option>
            </xsl:for-each>
         </xsl:for-each>
      </select>

      <xsl:value-of select="@name" />

      <hr />
   </xsl:template>

</xsl:stylesheet>

Еще можно пооптимизировать  (если это конечно то, что надо) smile 

Автор: jsse 26.6.2006, 16:15
То что надо! Благодарю.

ЗЫ. Пора и мне научиться думать деревьями smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)