Вывод в таблицу

aciDroN

Новичок
Вывод в таблицу

не пинайте больно, изучаю XML.
Есть данные
PHP:
<doc>
	<table>
		<client>
			<name>John</name>
			<order>John order 1</order>
			<order>John order 2</order>
		</client>
		<client>
			<name>Mike</name>
			<order>Mike order 1</order>
			<order>Mike order 2</order>
			<order>Mike order 3</order>
		</client>
	</table>
</doc>
Хочу вывести их в таблице
PHP:
John              |   Mike
John order1      |    Mike order 1
John order2      |    Mike order 2
                  |    Mike order 3
начал писать xsl но дальше этого не ушел..
PHP:
<xsl:template match="table">
	<table border="1">
		<tr>
		<xsl:for-each select="client">
			<td  bgcolor="#DDDDDD"><xsl:value-of select="name"/></td>
		</xsl:for-each>
		</tr>
	</table>
</xsl:template>
Есть решение?
 

slach

Новичок
PHP:
<xsl:template match="table"> 
    <div> 
        <xsl:apply-templates select="client"/> 
    </div>
</xsl:template>

<xsl:template match="client">
     <div style="float:left; width:200px;background-color:#DDDDDD">
              <div><xsl:value-of select="name"/></div>
           
        <xsl:apply-templates select="order"/> 
      </div> 
</xsl:template>

<xsl:template match="order">
              <div><xsl:value-of select="."/></div>
</xsl:template>
 

aciDroN

Новичок
Спасибо, конечно, за пример, но таблица на то и таблица, чтоб оформлять табличные данные, а не эмулировать её дивами. Под словом 'таблица' я имел ввиду html тэг <table>. Вообщем, вот что у меня получилось, кому может пригодится:
PHP:
 <xsl:template match="/doc">
    <html>
    <body>
    	<xsl:apply-templates select="table"/>
    </body>
    </html>
</xsl:template>

<xsl:variable name="limit">
    <xsl:value-of select="count(//client/name)"/>
</xsl:variable>

<xsl:template match="table">
	<table border="1">
		<thead><tr>
		<xsl:for-each select="client/name">
			<td><xsl:value-of select="."/></td>
		</xsl:for-each>
		</tr></thead>
		
		<xsl:for-each select="client[position()=1]/order">
		<tr>
			<xsl:call-template name="entrance">
			    <xsl:with-param name="col">
			        <xsl:value-of select="1"/>
			    </xsl:with-param>
			    <xsl:with-param name="row">
			        <xsl:value-of select="position()"/>
			    </xsl:with-param>
			</xsl:call-template>
		</tr>
		</xsl:for-each>
	</table>
	
</xsl:template> 

<xsl:template name="entrance">
    <xsl:param name="col"/>
    <xsl:param name="row"/>
    
	<td><xsl:value-of select="//client[position() = $col]/order[position() = $row]"/></td>
	
    <xsl:if test="$col &lt; $limit">
    	
        <xsl:call-template name="entrance">
            <xsl:with-param name="col">
                <xsl:value-of select="$col + 1"/>
            </xsl:with-param>
            <xsl:with-param name="row">
                <xsl:value-of select="$row"/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:if>
</xsl:template>
Количество строк в таблице равно количеству заказов от первого клиента, надо бы ещё найти самого "заказливого" клиента, ну ла ладно...
 
Сверху