[英]How to cut a dynamic string in xslt 1.0
我有一個具有這種結構的變量:var=A--B--C--D(可以包含或多或少的分隔符“--”)。就像它可以是 var=A--B--C--D --E--F--G.. 等)。
我怎樣才能輕松地將這個變量 var 轉換成 xsl 中動態的幾個變量,例如:VAR1 = A; VARnew2 = B; VARnew3 = C; VARnew4 = D;
我已經看到 function 像“substring-before”,我覺得我需要使用遞歸模板,但我不明白我該怎么做......或者也許有比“substring-before”更好的 function為我做..?
任何人都可以幫助我嗎? 將不勝感激! 謝謝
因為只能使用XSLT-1.0,遞歸嘗試就是go的方法:
這是樣本 XML:
<?xml version="1.0" ?>
<root>
<exampleString>A--B--C--D</exampleString>
<exampleString> --A--B--C--D</exampleString>
<exampleString>A--B--C --D--E--F--G</exampleString>
<exampleString>A--B--C--D--E-- </exampleString>
</root>
這是一個可能的 XSLT-1.0 解決方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/root/exampleString">
<xsl:call-template name="delimit">
<xsl:with-param name="str" select="." />
</xsl:call-template>
</xsl:template>
<xsl:template name="delimit">
<xsl:param name="str" />
<xsl:choose>
<xsl:when test="substring-before($str,'--')">
<xsl:if test="normalize-space(substring-before($str,'--'))">
<var><xsl:value-of select="normalize-space(substring-before($str,'--'))" /></var>
</xsl:if>
<xsl:call-template name="delimit">
<xsl:with-param name="str" select="substring-after($str,'--')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="normalize-space($str)">
<var><xsl:value-of select="$str" /></var>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
它的 output 是
<var>A</var><var>B</var><var>C</var><var>D</var>
<var>A</var><var>B</var><var>C</var><var>D</var>
<var>A</var><var>B</var><var>C</var><var>D</var><var>E</var><var>F</var><var>G</var>
<var>A</var><var>B</var><var>C</var><var>D</var><var>E</var>
當然,如果需要,您可以用換行符分隔<var>
元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.