-- 作者:xiaoyupan
-- 发布时间:11/30/2007 10:01:00 PM
-- [原创]用XSLT 转换 XML格式问题
请各位高手指点一下,在一个xml文件里父节点下存在同名的子节点如下面的例子里<Shop>下有两个<Table>子节点,<Table>节点下又有相同的子节点<TR>. 想把这个xml结构用XSLT变一下如下面的例子: 原xml文件: <Shop> <Table> <TR> <TH>ID</TH> <TH>Last Name</TH> <TH>First Name</TH> <TH>Product</TH> <TH>Price</TH> </TR> <TR> <TD>1000</TD> <TD>Chen</TD> <TD>jin</TD> <TD>CD1</TD> <TD>1,00</TD> </TR> <TR> <TD>1001</TD> <TD>Zhang</TD> <TD>San</TD> <TD>CD2</TD> <TD>1.50</TD> </TR> <TR> <TD>1002</TD> <TD>Li</TD> <TD>Si</TD> <TD>DVD1</TD> <TD>10.00</TD> </TR> </Table> <Table> <TR> <TH>PID</TH> <TH>Product Name</TH> <TH>Total</TH> <TH>Price</TH> </TR> <TR> <TD>5010</TD> <TD>CD1</TD> <TD>3000</TD> <TD>1,00</TD> </TR> <TR> <TD>6001</TD> <TD>CD2</TD> <TD>2500</TD> <TD>1.50</TD> </TR> <TR> <TD>10202</TD> <TD>DVD1</TD> <TD>500</TD> <TD>10.00</TD> </TR> </Table> </Shop> 转变后想得到的结构: <Shop> <table> <thead> <tr> <td>ID</td> <td>Last Name</td> <td>First Name</td> <td>Product</td> <td>Price</td> </tr> </thead> <tbody> <tr> <td>1000</td> <td>Chen</td> <td>jin</td> <td>CD1</td> <td>1.00</td> </tr> <tr> <td>1001</td> <td>Li</td> <td>Si</td> <td>CD2</td> <td>1.50</td> </tr> <tr> <td>1002</td> <td>Zhang</td> <td>San</td> <td>DVD1</td> <td>10.00</td> </tr> </tbody> </table> <table> <thead> <tr> <td>PID</td> <td>Product Name</td> <td>Total</td> <td>Price</td> </tr> </thead> <tbody> <tr> <td>5010</td> <td>CD1</td> <td>3000</td> <td>1,00</td> </tr> <tr> <td>6001</td> <td>CD2</td> <td>2500</td> <td>1.50</td> </tr> <tr> <td>10202</td> <td>DVD1</td> <td>500</td> <td>10.00</td> </tr> </tbody> </Table> </Shop> 我写了xsl文件: <?xml version="1.0"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method = "xml" omit-xml-declaration = "yes" indent = "yes"/> <xsl:template match="/"> <xsl:apply-templates select="Shop/Table"/> </xsl:template> <xsl:template match="Table"> <table> <thead> <xsl:for-each select="//TR[position()=1]"> <tr> <xsl:for-each select="//TR[position()=1]/TH"> <td> <xsl:value-of select="text()"/> </td> </xsl:for-each> </tr> </xsl:for-each> </thead> <tbody> <xsl:for-each select="//TR[position()>=2]"> <tr> <xsl:for-each select="//TR[position()>=2]/*"> <td> <xsl:value-of select="text()"/> </td> </xsl:for-each> </tr> </xsl:for-each> </tbody> </table> </xsl:template> </xsl:stylesheet> 结果: <table> <thead> <tr> <td>ID</td> <td>Last Name</td> <td>First Name</td> <td>Product</td> <td>Price</td> <td>PID</td> <td>Product Name</td> <td>Total</td> <td>Price</td> </tr> <tr> <td>ID</td> <td>Last Name</td> <td>First Name</td> <td>Product</td> <td>Price</td> <td>PID</td> <td>Product Name</td> <td>Total</td> <td>Price</td> </tr> </thead> <tbody> <tr> <td>1000</td> <td>Chen</td> <td>jin</td> <td>CD1</td> <td>1,00</td> <td>1001</td> <td>Zhang</td> <td>San</td> <td>CD2</td> <td>1.50</td> <td>1002</td> <td>Li</td> <td>Si</td> <td>DVD1</td> <td>10.00</td> <td>5010</td> <td>CD1</td> <td>3000</td> <td>1,00</td> <td>6001</td> <td>CD2</td> <td>2500</td> <td>1.50</td> <td>10202</td> <td>DVD1</td> <td>500</td> <td>10.00</td> </tr> 接下来5个同样的<tr>...</tr> <tr> ...... </tr> <table> 怎样将两个<Table>分开写道新的结构里呢?谢谢各位的指点!
|