我试图遍历几个输入文件,在HTML输出文件中创建一个表,其中每一行对应一个评论,但我无法获得相应的@Date值并将其复制到表的相应单元格中。任何帮助都将不胜感激。
XML输入文件
文件1
<review rid="id_001" date="2018-03-20">
<pc pid="pc_001">
<result>...</result>
</pc>
<pc pid="pc_002">
<result>...</result>
</pc>
</review>文件2
<review rid="id_002" date="2018-05-19">
<pc pid="pc_001">
<result>...</result>
</pc>
<pc pid="pc_002">
<result>...</result>
</pc>
</review>所需的HTML输出
<!-- @pid value outside the table as header. -->
<table>
<tr>
<td>Review ID</td>
<td>Date</td>
<td>Result</td>
</tr>
<tr>
<td>001</td>
<td>2018-03-20</td>
<td>...</td>
</tr>
<td>002</td>
<td>2018-05-19</td>
<td>...</td>
</tr>
</table>XSLT
<xsl:variable name="files" select="collection('../?select=*.xml')"/>
<xsl:template match="/">
<!-- @pid value outside the table as header. -->
<table>
<tr>
<td>Review ID</td>
<td>Date</td>
<td>Result</td>
</tr>
<xsl:if test="$files">
<xsl:for-each select="distinct-values($files/review/@rid)">
<xsl:variable name="currentRid" select="distinct-values($files/review/@rid)"/>
<xsl:variable name="currentPid" select="distinct-values($files/review/pc/@pid)"/>
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:for-each select="distinct-values($files/review/@date)">
<xsl:value-of select="."/>
</xsl:for-each>
</td>
<td>
<xsl:value-of select="distinct-values($files/review[@rid=$currentRid]/pc[@pid=$currentPid]/result)"/>
</td>
</tr>
</xsl:for-each>
</xsl:if>
</tr>
</table>
</xsl:template>发布于 2018-05-25 02:26:48
问题是您试图遍历所有review元素的@date值。将for-each表达式限制为与current() rid匹配的review元素,就像您在下一个xsl:value-of表达式中所做的那样,可以得到所需的输出。所以改变吧
<xsl:for-each select="distinct-values($files/review/@date)">至
<xsl:for-each select="distinct-values($files/review[@rid=current()]/@date)"> 我不能估计xsl:for-each是否是必要的-这取决于更大的图景-但也许下面的表达式就足够了
<xsl:value-of select="$files/review[@rid=current()]/@date"/>https://stackoverflow.com/questions/50515383
复制相似问题