Мне нужна помощь с кодом XSLT, который я пытаюсь создать. Приведенный ниже XML-код имеет несколько дочерних узлов, которые мне нужно преобразовать в объединенное значение 'variable' _ (значение имени файла). Мой образец XML ниже,
<Attachments>
<AttachFile>
<FilContentType>application/pdf; name=docxyz1.pdf</FilContentType>
<FileName>docxyz1.pdf</FileName>
</AttachFile>
<AttachFile>
<FilContentType>application/pdf;name=docxyz2.pdf</FilContentType>
<FileName>docxyz2.pdf</FileName>
</AttachFile>
<AttachFile>
<FilContentType>application/pdf; name=docxyz3.pdf</FilContentType>
<FileName>docxyz3.pdf.pdf</FileName>
</AttachFile>
</Attachments>
Преобразованный выходной сигнал должен быть таким, как показано ниже
<Attachments>
<AttachFile>
<FilContentType>application/pdf; name=docxyz1.pdf</FilContentType>
<FileName>1_docxyz1.pdf</FileName>
</AttachFile>
<AttachFile>
<FilContentType>application/pdf;name=docxyz2.pdf</FilContentType>
<FileName>2_docxyz2.pdf</FileName>
</AttachFile>
<AttachFile>
<FilContentType>application/pdf; name=docxyz3.pdf</FilContentType>
<FileName>3_docxyz3.pdf.pdf</FileName>
</AttachFile>
</Attachments>
Я пытался вызвать шаблон и использовать for-each, но моя логика неверна. Мой код XSLT ниже:
<xsl:variable name="Count" select="count(/Attachments/AttachFile/FileName)"/>
<xsl:variable name="i" select="1"></xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="Attachments"/>
</xsl:template>
<xsl:template match="Attachments">
<Attachments>
<xsl:for-each select="./Attachments/AttachFile">
<AttachFile>
<FilContentType><xsl:value-of select="FilContentType"/></FilContentType>
<xsl:call-template name="Increment">
<xsl:with-param name="i" select="1"/>
<xsl:with-param name="Count" select="$Count"/>
</xsl:call-template>
</AttachFile>
</xsl:for-each>
</Attachments>
</xsl:template>
<xsl:template name="Increment">
<xsl:param name="i"/>
<xsl:param name="Count"/>
<xsl:if test="$Count > $i">
<Filename>
<xsl:value-of select="concat($i,'_',FileName)"/>
</Filename>
<xsl:call-template name="Increment">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="Count" select="$Count"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Спасибо