Помогите сделать преобразование

  • Автор темы CrazyHacKeRs
  • Дата начала

CrazyHacKeRs

Guest
Помогите сделать преобразование

Имеется стркутура:
PHP:
<ITEM1>
      <SUB>
      </SUB>
</ITEM>

<ITEM2>
       <SUB>
       </SUB>
</ITEM>

<ITEM3>
       <SUB>
       </SUB>
</ITEM>
Нужно из этого сделать табличку с двумя колонками в строке:
PHP:
 <TABLE>
   <TR>
     <TD>ITEM1  (c SUB) </TD>
     <TD>ITEM2 </TD>
   </TR>
   <TR>
     <TD>ITEM3</TD>
     <TD>ITEM n... </TD>
   </TR>


 </TABLE>
 

jian

Guest
vopros

u vas nazvanie ITEM'ov deistvitelno raznye?
<ITEM1></ITEM1>
<ITEM2></ITEM2>
<ITEM3></ITEM3>

ili odinakobye?

<ITEM></ITEM>
<ITEM></ITEM>
<ITEM></ITEM>

bystro otevite bystee budet otvet ...

jian
 

CrazyHacKeRs

Guest
Нет, имена одинаковые - это я чтоб показать как табличка должна формироваться ( слева-направо, сверху-вниз)
 

jian

Guest
otvet na sluchai esli oni odinakovie:

<?xml version="1.0" encoding="utf-8" ?>
<root>
<item><sub>1</sub></item>
<item><sub>2</sub></item>
<item><sub>3</sub></item>
<item><sub>4</sub></item>
<item><sub>5</sub></item>
<item><sub>6</sub></item>
<item><sub>7</sub></item>
<item><sub>8</sub></item>
<item><sub>9</sub></item>
</root>


xsl:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:eek:utput method="html" version="4.01" encoding="UTF-8"/>


<xsl:template match="/">
<table>
<xsl:apply-templates select="root/item[position() mod 2=1]"/>
</table>
</xsl:template>

<xsl:template match="item">
<tr>
<td>
<xsl:value-of select="sub"/>
</td>
<td>
<xsl:value-of select="following-sibling::item/sub"/>
</td>
</tr>
</xsl:template>

</xsl:stylesheet>

resultat:
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
</tr>
<tr>
<td>9</td>
<td></td>
</tr>
</table>
 

CrazyHacKeRs

Guest
пока не пробывал, надо немного изменить мне ...

попробую, отвечу :)

СПАСИБО
 

jian

Guest
na sluchai esli oni ne odinakovie:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:eek:utput method="html" version="4.01" encoding="UTF-8"/>


<xsl:template match="/">
<table>
<xsl:apply-templates select="root/*[position() mod 2=1]"/>
</table>
</xsl:template>

<xsl:template match="*">
<tr>
<td>
<xsl:value-of select="sub"/>
</td>
<td>
<xsl:value-of select="following-sibling::*/sub"/>
< !- -
zdes mojno redaktirovat!???? klasno!
ignor my folowwing message.. cheers
<xsl:value-of select="following-sibling::item/sub"/>
- - >
</td>
</tr>
</xsl:template>

</xsl:stylesheet>

resultat totje:

jian
 

jian

Guest
oppsss....

na sluchai esli oni ne odinakovie:

<xsl:value-of select="following-sibling::*/sub"/>
_______________________________````````````
 

CrazyHacKeRs

Guest
Всё хорошо, ОГРОМНЕЙШЕЕ ТЕБЕ СПАСИБО!!!
 

CrazyHacKeRs

Guest
Грабли!!!
Прикрутил простой вариант - работает. Но немного усложнил и ....
Структура у меня на самом деле след.
PHP:
<root>
   <item>
       <name/>
       <sub1>
            <m_item>
            <m_item>
            <m_item>
         </sub1>
       <sub2>
       ....
       <sub>
    </item>
   <item>
       <name/>
       <sub1/>
       <sub2>
       ....
       <sub>
    </item>
</root>
Задача: вывести в две клонки, сперва заголовок (NAME), ну а если в нем есть SUB отобразить их - всё вместе это одна колонка.

Левая часть работает прекрасно, а вот где
PHP:
following-sibling
, начинаются глюки...

идет перечисление, как понимаю, всех SUB - при чём к концу их количество уменьшается.

Что нужно подправить?

Мой код:
PHP:
   <xsl:choose>
       <xsl:when test="not (following-sibling::CATALOG_LONGVIEW_ROOT/SUB)">
          <xsl:element name="A">
               <xsl:attribute name="HREF"><xsl:text>?gid=</xsl:text>
<xsl:value-of select="@menu_id"/></xsl:attribute>
              <xsl:attribute name="CLASS"><xsl:text>menu_header</xsl:text></xsl:attribute>
       <xsl:value-of select="following-sibling::CATALOG_LONGVIEW_ROOT/NAME"/>
                                                </xsl:element>
                                </xsl:when>
                                <xsl:otherwise>
                                                <xsl:value-of select="following-sibling::CATALOG_LONGVIEW_ROOT/NAME"/>
                                </xsl:otherwise>
                                </xsl:choose>







                        <xsl:choose>
                                <xsl:when test="(following-sibling::CATALOG_LONGVIEW_ROOT/SUB)">
                                        <xsl:apply-templates select="following-sibling::CATALOG_LONGVIEW_ROOT/SUB/MENU_ITEM" mode="one_line"/>
                                <br/>
                                </xsl:when>
                        </xsl:choose>
 

jian

Guest
utochnenie

minutku.....

kod ne ochen ponyatnyi.....
ne polenites napishite xml s znacheniyami.
potom html otvet s 'table'om, 'tr'om i 'td' s znacheniyami s xml'a.

tem vremenem poprobuyu chenid s togo koda kotoryi (ne)ponyal.

*************************
redaktiruem.........
*************************

<xsl:choose>
<xsl:when test="not (following-sibling::CATALOG_LONGVIEW_ROOT/SUB)">
<! - - eto mojno pereposat kak
<xsl:element name="A">
<xsl:attribute name="HREF"><xsl:text>?gid=</xsl:text>
<xsl:value-of select="@menu_id"/></xsl:attribute>
<xsl:attribute name="CLASS"><xsl:text>menu_header</xsl:text></xsl:attribute>
- - >
<A href="?gid{@menu_id}" CLASS="menu_header">


<xsl:value-of select="following-sibling::CATALOG_LONGVIEW_ROOT/NAME"/>
<! - - </xsl:element> -->
</A>
</xsl:when>
<! - -ya tak ponimayu u vas sdes sintaks oshibka?
<xsl<img src="images/smilies/redface.gif" border="0" alt="">therwise>
____________________*************************************************
<xsl:value-of select="following-sibling::CATALOG_LONGVIEW_ROOT/NAME"/>
</xsl<img src="images/smilies/redface.gif" border="0" alt="">therwise>
____________________*************************************************

tak vy copy/paste so smailikami sdelali!!!!! hehhehe
sdes ": o" ili ": p" prevrashayutsa v smailiki.
napromer <xsl:eek:therwise/> u vas prevratilsa v <xsl SMILIKtherwise/>
tak vy etogo ne zametili!!!!!!!!!!! hehehhe
- - >
<xsl:eek:therwise>
<xsl:value-of select = "following-sibling::CATALOG_LONGVIEW_ROOT/NAME"/>
</xsl:eek:therwise>


</xsl:choose>

< ! - - prodoljaem redaktirovat... - - >
<xsl:choose>
<xsl:when test = "(following-sibling::CATALOG_LONGVIEW_ROOT/SUB)">
<xsl:apply-templates select = "following-sibling::CATALOG_LONGVIEW_ROOT/SUB/MENU_ITEM" mode="one_line"/>
<br/>
</xsl:when>
</xsl:choose>

jian

NASTYATELNO PROSHU PREDOSTAVIT *POLNYI* PRIMER XML'a I POLNYI JELAEMYI REZULTAT.

PS vchera otdihal, .....
 

CrazyHacKeRs

Guest
Я так понял, что неправильно выбирались following-sibling... вычислялись все.

Поставил ограничение на первый элемент [1] и все заработало (покрайней мере сейчас)
 
Сверху