2017-02-07 3 views
0

XMLXSLT - どのように各要素を分割する区切り文字に基づいて

abc(123)def(456)ghi(789)jkl(098)mno(765) 

に次のように私の入力が可能になる誰かが「私は特定の区切り文字に基づいて、XSLTを使用する方法について入力行を分割する方法を教えてくださいことができます) 'と表示されるので、出力は次のようになります。 閉じ括弧の後の区切り文字は ';'

abc(123);def(456);ghi(789);jkl(098);mno(765) 

おかげ

答えて

0

あなたが何かを分割しているようにそれは本当に見ていないので、別のXSLT 2.0のオプションは、ちょうどreplace() ...

XML入力

<test>abc(123)def(456)ghi(789)jkl(098)mno(765)</test> 
にあります

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="test"> 
    <xsl:copy> 
     <xsl:value-of select="replace(.,'\)',');')"/> 
     <!-- 
     Instead of replace(), you could also use tokenize()/string-join(): 
     <xsl:value-of select="string-join(tokenize(.,'\)'),');')"/> 
     or even tokenize() with the separator attribute: 
     <xsl:value-of select="tokenize(.,'\)')" separator=");"/> 
     --> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

出力

<test>abc(123);def(456);ghi(789);jkl(098);mno(765);</test> 

あなたがXSLT 1.0を使用する必要があると拡張機能を使用することはできません/したくない場合は、再帰的なテンプレートの呼び出しを使用することができます

XSLTを1.0(上記と同じ入出力)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="test"> 
    <xsl:copy> 
     <xsl:call-template name="addSeparator"> 
     <xsl:with-param name="input" select="."/> 
     </xsl:call-template>  
    </xsl:copy> 
    </xsl:template> 

    <xsl:template name="addSeparator"> 
    <xsl:param name="sep" select="';'"/> 
    <xsl:param name="input"/> 
    <xsl:variable name="remaining" select="substring-after($input,')')"/> 
    <xsl:value-of select="concat(substring-before($input,')'),')',$sep)"/> 
    <xsl:if test="$remaining"> 
     <xsl:call-template name="addSeparator"> 
     <xsl:with-param name="input" select="$remaining"/> 
     <xsl:with-param name="sep" select="$sep"/> 
     </xsl:call-template> 
    </xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 
関連する問題