-5

我有一个如下的 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>

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

 <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>

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

4

1 回答 1

1

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

只要不缺少名字、姓氏或电子邮件元素,这非常简单:

<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>

如果某些元素可能丢失,那么这将变得相当困难。希望这就是你所需要的。

于 2012-11-16T04:43:30.933 回答