以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  如何用XSL将XML中的数据转换成M*N的二维表格?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=11243)


--  作者:grief
--  发布时间:10/24/2004 12:04:00 PM

--  如何用XSL将XML中的数据转换成M*N的二维表格?
有如下的XML文档
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
<writerlist type="A">
 <item>
 <writerid>1000</writerid>
 <writername>writer1</writername>
 </item>

 <item>
 <writerid>1001</writerid>
 <writername>writer2</writername>
 </item>

 <item>
 <writerid>1002</writerid>
 <writername>writer3</writername>
 </item>

 <item>
 <writerid>1003</writerid>
 <writername>writer4</writername>
 </item>

 <item>
 <writerid>1004</writerid>
 <writername>writer5</writername>
 </item>

 <item>
 <writerid>1005</writerid>
 <writername>writer6</writername>
 </item>
</writerlist>

现在想通过XSL将其转成一个二维表格,表格分成三列,即每显示三条数据就换行(表格行)
上面的XML转换以后的效果应该如下:
A
writer1  writer2  writer3  
writer4  writer5  writer6  

我的XSL是这样写的:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

<table>
<tr>
<td><xsl:value-of select="writerlist/@type"/></td>
</tr>
</table>

<table>

<xsl:for-each select="writerlist/item">
<xsl:eval disable-output-escaping="yes">TableLine(childNumber(this),1)</xsl:eval>
<td>
<a>
<xsl:attribute name="href">writer/writer<xsl:value-of select="writerid"/>.xml</xsl:attribute>
<xsl:value-of select="writername"/>
</a>
</td>
<xsl:eval disable-output-escaping="yes">TableLine(childNumber(this),2)</xsl:eval>
</xsl:for-each>
</table>
</xsl:template>

<xsl:script disable-output-escaping="yes">
<![CDATA[
function TableLine(index,flag){
  if((index-1)%3==0&&flag==1) return("<tr>");
  if(index%3==0&&flag==2) return("</tr>");
}
]]>
</xsl:script>
</xsl:stylesheet>

但是转换以后显示结果如下:
A
<tr>
</tr><tr>
</tr>
writer1 writer2  writer3 writer4  writer5  writer6

我查看了源代码,发现原来我的TableLine函数中输出的< > 被转成了 & lt; & gt;了,源代码如下:
<table>
<tr>
<td>A</td>
</tr>
</table>
<table>
& lt;tr& gt;
<td>
<a href="writer/writer1000.xml">
writer1
</a>
</td>


<td>
<a href="writer/writer1001.xml">
writer2
</a>
</td>


<td>
<a href="writer/writer1002.xml">
writer3
</a>
</td>
& lt;/tr& gt;
& lt;tr& gt;
<td>
<a href="writer/writer1003.xml">
writer4
</a>
</td>


<td>
<a href="writer/writer1004.xml">
writer5
</a>
</td>


<td>
<a href="writer/writer1005.xml">
writer6
</a>
</td>
& lt;/tr& gt;
</table>

生成的<tr> </tr>位置没有错,只不过成了转义符了,晕倒。。。。。。这个如何解决,有什么更好的方法吗?



--  作者:孤独
--  发布时间:10/24/2004 8:10:00 PM

--  
<xsl:text disable-output-escaping="yes">写在这里面</xsl:text>
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
64.453ms