我有一个非常大的 XML 文件的摘录,其中包含很多未知数。这个 XML 文件包含许多概念组,每个概念组可以包含不同数量的语言组/语言,而这些语言组/语言又可以包含不同数量的术语。
<mtf>
<conceptGrp>
<concept>1</concept>
<languageGrp>
<language lang="DE" type="Deutsch"/>
<termGrp>
<term>Abbildung</term>
</termGrp>
</languageGrp>
<languageGrp>
<language lang="PL" type="Polnisch"/>
<termGrp>
<term>ilustracja</term>
</termGrp>
</languageGrp>
<languageGrp>
<language lang="RU" type="Russisch"/>
<termGrp>
<term>иллюстрация</term>
</termGrp>
<termGrp>
<term>рисунок</term>
</termGrp>
</languageGrp>
<languageGrp>
<language lang="CS" type="Tschechisch"/>
<termGrp>
<term>vyobrazení</term>
<descripGrp>
<descrip type="Autor">MK</descrip>
</descripGrp>
</termGrp>
</languageGrp>
</conceptGrp>
</mtf>
我需要一个 html 表来满足这些不同的可能性。表格的形式应该是:
对于每种语言(无论有多少)单独一行,对于每个术语单独一行 - 如下所示:重要的是,如果有超过 1 个术语,则将它们视为同义词并显示在与下面的例子。
Concept Deutsch Polnisch Russisch Tschechisch
1 Abbildung ilustracja иллюстрация vyobrazení
1 рисунок
我的问题:有时第一个 languageGrp 有多个术语,有时第三个,......我试图将 conceptGrps 组合在一起,并且采用复杂的方式没有问题-)这是我的版本,但我必须适应它每个新文件,因为我永远不知道有多少种语言、术语……可能有。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="mtf">
<html>
<body>
<h2>Terminologie</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="conceptGrp">
<xsl:for-each select=".">
<table>
<tr> <!--Zeile 1-->
<td>Konzept-ID</td>
<xsl:for-each select="languageGrp">
<td><xsl:value-of select="language/@type"/></td> <!--Spalte2-->
</xsl:for-each>
</tr>
<tr> <!--Zeile 2-->
<td><xsl:value-of select="concept"/></td> <!--Spalte1-->
<xsl:for-each select="languageGrp//termGrp[1]">
<td><xsl:value-of select="term"/></td> <!--Spalte2-->
</xsl:for-each>
</tr>
<xsl:if test="languageGrp//termGrp[2]">
<tr>
<td><xsl:value-of select="concept"/></td>
<td><xsl:value-of select="languageGrp[1]//termGrp[2]/term"/></td>
<td><xsl:value-of select="languageGrp[2]//termGrp[2]/term"/></td>
<td><xsl:value-of select="languageGrp[3]//termGrp[2]/term"/></td>
<td><xsl:value-of select="languageGrp[4]//termGrp[2]/term"/></td>
</tr>
</xsl:if>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
有人能以更优雅、更全球化的方式推动我吗?这将不胜感激。