2010-05-17 31 views
8

XSLT 1.0'da bir parametre olarak geçirdiğim bir virgülle ayrılmış dize ile nasıl iletişim kurabilirim? ExVirgül ayrıştırma dizgisi ayrıştırma XSLT

<xsl:param name="UID">1,4,7,9</xsl:param> 

ben özyineleme bu sorunu çözebilir benim XML dosyası

+0

İyi soru (1). Açık özyineleme içermeyen bir çözüm için cevabımı görün. –

cevap

3

FXSLstr-split-to-words şablonunu kullanan bir XSLT 1.0 çözümü. böylece bile 1,4 7;9 bu çözüm kullanarak sorunsuz bölünecektir bu şablonu (ayrı parametre dize olarak geçirilen) çoklu sınırlayıcı üzerinde bölmek izin verdiğini

Not. Bu dönüşüm aşağıdaki XML belgesinin uygulanır

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common" 
> 

    <xsl:import href="strSplit-to-Words.xsl"/> 

    <xsl:output indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
     <xsl:call-template name="str-split-to-words"> 
     <xsl:with-param name="pStr" select="/"/> 
     <xsl:with-param name="pDelimiters" 
         select="', ;&#9;&#10;&#13;'"/> 
     </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 

: aranan, doğru sonuç üretilir

<x>1,4,7,9</x> 

:

<word>1</word> 
<word>4</word> 
<word>7</word> 
<word>9</word> 
+0

Teşekkürler. Bu virgülle ayrılmış parametreyi döngülemek için sözdizimi nedir? Çözüm üzerinde çalıştı, ancak hata var "Önek 'http://fxsl.sf.net/' önek uygulayan komut dosyası veya harici nesne bulunamıyor." Ben dosyaları düzgün indirilmiş olmayabilir sanırım. Eh, sadece bu düğümlü ayrılmış dize parametresindeki her bir kimlik değerini XML düğüm kimliğine göre eşleştirmem gerekiyor ve eşleşme bulunursa her düğümün metnini çıktı XML'de görüntülemek için topladım. Lütfen bunu XSLT 1.0'da yapmam gerektiğini unutmayın. – contactkx

+0

@contactx: Benim dönüşümümü gerçekleştiremeyeceğiniz anlamına mı geliyor? FXSL 1.x'i indirdiniz mi? 'talimatının' href' özniteliği, kitaplıktaki şablonun tam veya göreli yolunu belirtmelidir. –

19

Vanilya XSLT 1.0 döngü UID her içerisinden yukarıda UID parametre ve collectd düğümleri gerekir.

<xsl:template name="split"> 
    <xsl:param name="list"  select="''" /> 
    <xsl:param name="separator" select="','" /> 

    <xsl:if test="not($list = '' or $separator = '')"> 
    <xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)" /> 
    <xsl:variable name="tail" select="substring-after($list, $separator)" /> 

    <!-- insert payload function here --> 

    <xsl:call-template name="split"> 
     <xsl:with-param name="list"  select="$tail" /> 
     <xsl:with-param name="separator" select="$separator" /> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

dize sembolleştirmeyi yapabilirsiniz önceden oluşturulmuş uzatma kütüphaneleri (EXSLT örneğin bunun için bir şablon vardır) vardır, ama bu burada gerçekten gerekli olup olmadığını tartışıyor.

+0

"string-join" için özyinelemeli bir şablona sahip misiniz? – n611x007

İlgili konular