Я предполагаю, что, например, в строке, содержащей SecondNameC , в остальных столбцах должны отображаться те же значения, что и для MainNameC , то есть 03
и subA 123.0 g/L
.
Сценарий, приведенный ниже, выполняет работу:
<?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" doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system= "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
<xsl:template match="/">
<html>
<head><title>Rep</title></head>
<body>
<table style="width:80%" border="1">
<tr><th>Name</th><th>ID</th><th>Composition</th></tr>
<xsl:for-each select="root/intrants/CCCs/PPP">
<tr>
<xsl:call-template name="displayMN">
<xsl:with-param name="MN" select="." />
</xsl:call-template>
</tr>
</xsl:for-each>
<xsl:for-each select="root/intrants/CCCs/PPP">
<xsl:variable name="MN" select="."/>
<xsl:if test="count(others-names/other-name) > 0">
<xsl:for-each select="others-names/other-name/name">
<tr>
<xsl:call-template name="displaySN">
<xsl:with-param name="MN" select="$MN"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<!-- Main Product -->
<xsl:template name="displayMN">
<xsl:param name="MN"/>
<td>
<xsl:call-template name="displayMainName">
<xsl:with-param name="name" select="product-name"/>
</xsl:call-template>
</td>
<xsl:call-template name="displayCore">
<xsl:with-param name="Produit" select="."/>
</xsl:call-template>
</xsl:template>
<!-- Second Product -->
<xsl:template name="displaySN">
<xsl:param name="MN"/>
<td>
<xsl:call-template name="displaySecondName">
<xsl:with-param name="name" select="."/>
</xsl:call-template>
</td>
<xsl:call-template name="displayCore">
<xsl:with-param name="Produit" select="$MN"/>
</xsl:call-template>
</xsl:template>
<!-- Core -->
<xsl:template name="displayCore">
<xsl:param name="Produit"/>
<td>
<xsl:call-template name="displaynbID">
<xsl:with-param name="nbID" select="$Produit/nbID"/>
</xsl:call-template>
</td>
<td>
<xsl:call-template name="displayCompositionEN">
<xsl:with-param name="Composition" select="$Produit"/>
</xsl:call-template>
</td>
</xsl:template>
<!-- Main Name -->
<xsl:template name="displayMainName">
<xsl:param name="name"/>
<xsl:value-of select="$name"/>
</xsl:template>
<!-- Second Name -->
<xsl:template name="displaySecondName">
<xsl:param name="name"/>
<xsl:value-of select="$name"/>
</xsl:template>
<!-- IDnb -->
<xsl:template name="displaynbID">
<xsl:param name="nbID"/>
<xsl:value-of select="$nbID"/>
</xsl:template>
<!-- Composition EN -->
<xsl:template name="displayCompositionEN">
<xsl:param name="Composition"/>
<xsl:for-each select="$Composition/int-composition/act-subs/act-sub">
<xsl:call-template name="displaySubstanceEN">
<xsl:with-param name="AS" select="substance"/>
<xsl:with-param name="SACc" select="AS-concentration"/>
</xsl:call-template>
<xsl:if test="position() != last()">
<xsl:text> + </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
<!-- Substance EN-->
<xsl:template name="displaySubstanceEN">
<xsl:param name="AS"/>
<xsl:param name="SACc"/>
<xsl:value-of select="$AS"/> <xsl:value-of select="$SACc"/> <xsl:value-of select="$SACc/@unite"/>
</xsl:template>
</xsl:stylesheet>
Рабочий пример см. http://xsltransform.net/asnmyT
Я вижу, что вы забыли, что элемент контекста изменился, например, в for-each
loop.
Обратите внимание, что я изменил шаблон displaySN .Он содержит параметр MN
, относящийся к элементу "main" (PPP).
Также есть некоторые изменения в шаблоне displayCompositionEN .
Я также добавил xsl:output
элемент с doctype-public
и doctype-system
атрибутами для генерации вывода XHTML, чтобы получить представление HTML на xsltransform тестовом сайте.Но если вам это не нужно, просто удалите его.