Xml XSLT创建表
我有一个行数未知的xml表,如下所示:Xml XSLT创建表,xml,xslt,Xml,Xslt,我有一个行数未知的xml表,如下所示: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="Realone.xsl"?> <norm builddate="xxxxxxxxxxxxxx" doknr="xxxxxxxxxxxxxxxxxxx"> <textdata> <text format="XML"> <
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Realone.xsl"?>
<norm builddate="xxxxxxxxxxxxxx" doknr="xxxxxxxxxxxxxxxxxxx">
<textdata>
<text format="XML">
<Content>
<BR />
<table frame="all" pgwide="1" tabstyle="tab2" tocentry="%yes;">
<tgroup align="left" char="" charoff="50" cols="3" colsep="1" rowsep="1">
<colspec colname="col1" colnum="1" />
<colspec colname="col2" colnum="2" />
<colspec colname="col3" colnum="3" />
<thead valign="bottom">
<row>
<entry VJ="1" align="center" colname="col1" colsep="1" rowsep="1" valign="top">Color</entry>
<entry VJ="1" align="center" colname="col2" colsep="1" rowsep="1" valign="top">Number1</entry>
<entry VJ="1" align="center" colname="col3" valign="top">Number2</entry>
</row>
</thead>
<tbody valign="top">
<row>
<entry VJ="1" align="left" colname="col1" colsep="1" rowsep="1" valign="top">blue</entry>
<entry VJ="1" align="left" colname="col2" colsep="1" rowsep="1" valign="top">11-11-11</entry>
<entry VJ="1" align="left" colname="col3" colsep="1" rowsep="1" valign="top">44</entry>
</row>
<row>
<entry VJ="1" align="left" colname="col1" colsep="1" rowsep="1" valign="top">Red</entry>
<entry VJ="1" align="left" colname="col2" colsep="1" rowsep="1" valign="top">22-22-22</entry>
<entry VJ="1" align="left" colname="col3" colsep="1" rowsep="1" valign="top">33</entry>
</row>
</tbody>
</tgroup>
</Content>
</text>
请注意:
1.无法更改xml文件(我的输入)。
2.不知道有多少行
我如何使用XSLT来管理它?
提前感谢。假设行和行顺序由
colspec
指定。您可以这样做:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="table">
<table>
<xsl:apply-templates select="tgroup/*/row" />
</table>
</xsl:template>
<xsl:template match="row" >
<xsl:variable name="row" select="." />
<tr>
<xsl:for-each select ="../../colspec">
<td>
<xsl:value-of select="$row/entry[@colname=current()/@colname]"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>
即使缺少行或者行的顺序不同,这也应该有效。也可以将
xsl:sort
添加到colspec中,用于每个请发布您的输入和相应所需输出的示例我发布的xml快照是我的输入。例如,请参见OK,将看一看,谢谢:)我刚刚看到您的编辑,您的(xml)表确实是xslt样式表的一部分?天哪,不,对不起,我今天很头疼,不,XML不是我xslt样式表中的一部分,对不起。当我测试它时,它没有显示任何内容,只有空白。它工作正常,我真的很抱歉,今天不是我的日子,非常头痛,我意识到我的错误。谢谢你的回答:)
Color Number 1 Number2
Blue 11-11-11 44
Red 22-22-22 33
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="table">
<table>
<xsl:apply-templates select="tgroup/*/row" />
</table>
</xsl:template>
<xsl:template match="row" >
<xsl:variable name="row" select="." />
<tr>
<xsl:for-each select ="../../colspec">
<td>
<xsl:value-of select="$row/entry[@colname=current()/@colname]"/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>