如何在XSLT中生成垂直表?

时间:2012-11-16 03:09:17

标签: xml xslt

我有一个xml如下所示,我需要使用xslt进行翻译。

<table-text>
    <widget-wrap> <firstname lang="en">first name 1</firstname></widget-wrap>
    <widget-wrap><lastname>last name 1</lastname></widget-wrap>
    <widget-wrap><email>email 1</email></widget-wrap>
</table-text>

<table-text>
<widget-wrap><firstname lang="en">first name 2</firstname></widget-wrap>
<widget-wrap><lastname>last name 2</lastname></widget-wrap>
<widget-wrap><email>email 2</email></widget-wrap>
</table-text>

<table-text>
<widget-wrap><firstname lang="en">first name 3</firstname></widget-wrap>
<widget-wrap><lastname>last name 3</lastname></widget-wrap>
<widget-wrap><email>email 3</email></widget-wrap>
</table-text>

输出shoule是一个垂直表,如下所示:

 <table>
      <tr>
   <td>first name 1</td>
   <td>first name 2</td>
   <td>first name 3</td>
   </tr>
<tr>
    <td>last name 1</td>
    <td>last name 2</td>
    <td>last name 3</td>
</tr>
<tr>
    <td>email 1</td>
    <td>email 2</td>
    <td>email 3</td>
</tr>
 </table>

有人可以帮我解决这个问题。谢谢你。

1 个答案:

答案 0 :(得分:1)

您输入的一个问题是有效的XML只能有一个根节点,因此您需要在执行XSLT之前将所有表文本元素包装在另一个元素中。

只要没有丢失的firstname,lastname或email元素,这很简单:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="/">
        <table>
            <tr>
                <xsl:apply-templates select="//firstname"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//lastname"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//email"/>
            </tr>
        </table>
    </xsl:template>

    <xsl:template match="firstname">
        <td><xsl:apply-templates /></td>
    </xsl:template>

    <xsl:template match="lastname">
        <td><xsl:apply-templates /></td>
    </xsl:template>

    <xsl:template match="email">
        <td><xsl:apply-templates /></td>
    </xsl:template>

</xsl:stylesheet>

如果某些元素可能缺失,那么这将变得更加困难。希望这就是你所需要的一切。