簡體   English   中英

xslt 1.0中如何截取動態字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM