我有一个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>
有人可以帮我解决这个问题。谢谢你。
答案 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>
如果某些元素可能缺失,那么这将变得更加困难。希望这就是你所需要的一切。