我正在尝试创建一个XSLT来转换XML文档,但我在分组方面遇到了麻烦。我没有问题为单个对象提取信息,但我不知道如何使用xslt对某些元素进行分组。我尝试过xsl:for-each-group和xsl:key进行分组,但我在转换方面没有成功。
输入:
<?xml version="1.0" standalone="yes"?>
<root>
<node1>
<ID>2</ID>
<Name>ABCDE</Name>
<Age>21</Age>
<Skills>C++ C#</Skills>
<worklocation>IN</worklocation>
<designaton>Engineer I</designaton>
</node1>
<node2>
<ID>3</ID>
<Name>EFGH</Name>
<Age>12</Age>
<Skills>java</Skills>
<worklocation>USA</worklocation>
<designaton>Engineer II</designaton>
</node2>
</root>
期望输出:
<root>
<node1>
<ID>2</ID>
<Name>ABCDE</Name>
<Age>21</Age>
<workInfo>
<Skills>C++ C#</Skills>
<worklocation>IN</worklocation>
<designaton>Engineer I</designaton>
</workInfo>
</node1>
<node2>
<ID>3</ID>
<Name>EFGH</Name>
<Age>12</Age>
<workInfo>
<Skills>java</Skills>
<worklocation>USA</worklocation>
<designaton>Engineer II</designaton>
</workInfo>
</node2>
</root>
答案 0 :(得分:2)
使用身份模板:请参阅W3C recommandation
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
然后应用与root
节点的每个子节点匹配的特定模板,并将动态创建workInfo
节点。
<xsl:template match="/root/*">
<xsl:apply-templates select="ID|Name|Age" />
<workInfo>
<xsl:apply-templates select="Skills|worklocation|designaton" />
</workInfo>
</xsl:template>