Как удалить некоторый контент из элементов с помощью XSLT
Для тега изображения мне нужно сохранить только файл изображения с содержимым "file/" с помощью XSLT в выводе JSON:
Мой входной файл XML:
<image>binary/alias/my.jpg</image>
XSL, который используется как:
<xsl:template match="image">
image: <xsl:apply-templates/>,
</xsl:template>
Выход JSON, который я получаю:
image: binary/alias/my.jpg
Мне нужен вывод:
image: files/my.jpg
Пожалуйста помоги мне с этим. Заранее спасибо.
В XSLT 2.0 вы можете:
<xsl:template match="image">
<xsl:text>image: files/</xsl:text>
<xsl:value-of select="tokenize(., '/')[last()]"/>
</xsl:template>
Чтобы получить строку после последнего вхождения символа (в этом случае "/"), вам понадобится (в XSLT-1.0) рекурсивный шаблон. Применяя этот шаблон, решение прост: выведите желаемый текст префикса "image: files/" и добавьте результат рекурсивного шаблона:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="image">
image: files/<xsl:call-template name="LastOccurrence">
<xsl:with-param name="value" select="text()" />
<xsl:with-param name="separator" select="'/'" />
</xsl:call-template>
</xsl:template>
<xsl:template name="LastOccurrence">
<xsl:param name="value" />
<xsl:param name="separator" select="'/'" />
<xsl:choose>
<xsl:when test="contains($value, $separator)">
<xsl:call-template name="LastOccurrence">
<xsl:with-param name="value" select="substring-after($value, $separator)" />
<xsl:with-param name="separator" select="$separator" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Шаблон LastOccurrence
был вдохновлен этим сообщением SO.