我在我的xml
<GROUP>
<ELEM_1/>
<ELEM_1/>
<ELEM_1/>
<ELEM_1/>
</GROUP>
<GROUP>
<TAB>
<LEFT>
<ELEM_1/>
<ELEM_1/>
<ELEM_2/>
</LEFT>
<RIGHT>
<ELEM_1/>
<ELEM_2/>
<ELEM_2/>
<ELEM_1/>
</RIGHT>
</TAB>
</GROUP>
<GROUP>
<ELEM_1/>
<ELEM_1/>
<ELEM_1/>
<ELEM_1/>
</GROUP>
我有和xsl转换这个xml来显示它。
我希望节点TAB显示为一个包含两列LEFT和RIGHT的表,每一列显示一个包含ELEM_1和ELEM_2的列。
我有xsl:template
如何显示ELEM_1和ELEM_2的方式。
我有这个xsl:template
用于做我想做的TAB
<xsl:template match="TAB">
<table>
<tr>
<td><xsl:apply-templates select="LEFT"/></td>
<td><xsl:apply-templates select="RIGHT"/></td>
</tr>
</table>
</xsl:template>
但右边和左边的xsl:template
不能按照我想要的方式工作
<xsl:template match="LEFT">
<ul class="Group">
<li class="TabTitle">Left title</li>
<xsl:if test="ELEM_1">
<xsl:apply-templates select="ELEM_1"/>
</xsl:if>
<xsl:if test="ELEM_2">
<xsl:apply-templates select="ELEM_2"/>
</xsl:if>
</ul>
</xsl:template>
<xsl:template match="RIGHT">
<ul class="Group">
<li class="TabTitle">Right title</li>
<xsl:if test="ELEM_1">
<xsl:apply-templates select="ELEM_1"/>
</xsl:if>
<xsl:if test="ELEM_2">
<xsl:apply-templates select="ELEM_2"/>
</xsl:if>
</ul>
</xsl:template>
怎么做对了? 感谢
答案 0 :(得分:0)
我不确定为什么你的测试失败了。在下面的解决方案中,无论如何都不需要测试,XSLT的优点是声明性语言。你走了:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<xsl:template match="/">
<xsl:apply-templates select="/ROOT/GROUP/TAB" />
</xsl:template>
<xsl:template match="TAB">
<table>
<tr>
<xsl:apply-templates select="LEFT | RIGHT "/>
</tr>
</table>
</xsl:template>
<xsl:template match="LEFT">
<td>
<ul class="Group">
<li class="TabTitle">Left title</li>
<xsl:apply-templates select="ELEM_1"/>
<xsl:apply-templates select="ELEM_2"/>
</ul>
</td>
</xsl:template>
<xsl:template match="RIGHT">
<td>
<ul class="Group">
<li class="TabTitle">Right title</li>
<xsl:apply-templates select="ELEM_1"/>
<xsl:apply-templates select="ELEM_2"/>
</ul>
</td>
</xsl:template>
<!-- your elm templates -->
<xsl:template match="ELEM_1">
<p>ELEM 1 OUTPUT</p>
</xsl:template>
<xsl:template match="ELEM_2">
<p>ELEM 2 OUTPUT</p>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
我不确定您要实现的结果示例(可能枚举ELEM_1,ELEM_2节点):
<xsl:template match="TAB">
<table>
<tr>
<td><xsl:apply-templates select="LEFT"/></td>
<td><xsl:apply-templates select="RIGHT"/></td>
</tr>
</table>
</xsl:template>
<xsl:template match="LEFT">
<ul class="Group">
<li class="TabTitle">Left title</li>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="RIGHT">
<ul class="Group">
<li class="TabTitle">Right title</li>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="LEFT/* | RIGHT/*">
<!--Do something - copy Elem_1, Elem_2 element nodes for example -->
<xsl:copy/>
</xsl:template>