Я хотел бы попросить отладки в следующем XSLT-коде.Мой XSLT проверяет изображения в каталоге, а затем создает элемент на основе этого изображения, если он существует.
XSLT:
<xsl:stylesheet exclude-result-prefixes="xs fs" version="2.0" xmlns:fs="java.io.File" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- remove not available elements -->
<xsl:template match="xml">
<xsl:copy>
<xsl:for-each select="product[avail != 'No']">
<xsl:copy>
<xsl:copy-of select="@*|node()"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<!-- add extra images if exists $code_001.jpg, _002.jpg... -->
<!--example: <IMAGE1>test.com/0012307_001.jpg</IMAGE> -->
<!-- ls /home/hpapagaj/images/: 001230.jpg, 0012307_001.jpg etc. -->
<xsl:template match="product">
<xsl:copy>
<xsl:apply-templates />
<xsl:variable name="imageproductid" select="code" />
<xsl:for-each select="1 to 5">
<xsl:variable name="filename"
select="concat('/home/hpapagaj/images/',$imageproductid,'_00', ., '.jpg')" />
<xsl:if test="fs:exists(fs:new($filename))">
<xsl:element name="{concat('IMAGE', .)}">
<xsl:value-of select="concat('https://test.com/',tokenize($filename, '/')[last()])" />
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Мой XML прост как:
<xml>
<product>
<code>001237</code>
<avail>Yes</avail>
<IMGURL>https://test.com/001237.jpg</IMGURL>
</product>
</xml>
Поскольку я добавил фильтрацию (удалил недоступные элементы):
<!-- remove not available elements -->
<xsl:template match="xml">
<xsl:copy>
<xsl:for-each select="product[avail != 'No']">
<xsl:copy>
<xsl:copy-of select="@*|node()"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
... он перестал работать.Я могу переместить эту часть в другой XSLT, но я хотел бы преобразовать его за один шаг.