开发者

how to concact more than two requirements at a time

hi all i have written a logic based on a requirement concact more than two data at a time in my xslt code but i m n开发者_如何学编程ot reaching my expected output can any one give some suggestions

here is my xml

         <Swift>
            <block4>
                  <tag>
            <name>50K</name>
            <value>
                0101/0457887750
                SAMAROCA
                MENENDEZ Y PELAYO
            </value>
        </tag>
            </block4>
      </Swift>

i have written an xslt here :

<xsl:template  match="swift/message/block4/tag [name='50K']">       
    <xsl:variable name ="del50k" select ="(translate(substring-after(value,'&#13;'),'&#13;','~'))"/>
    <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,'&#13;'),6), ',',$del50k)" /> 
</xsl:template>

is that way doing is correct or not ? can any one help

EXPECTED OUTPUT:

0101/,0457887750,SAMAROCA~MENENDEZ Y PELAYO


I'm giving you a full working example based on your input. A few notes:

  • Use normalize-space() and split the string by space.
  • Just play with substring-before and substring-after.
  • make sure to use xsl:strip-space.

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

    <xsl:variable name="space" select="'&#x20;'"/>

    <xsl:template match="block4/tag[name='50K']">
        <xsl:variable name="value" select="normalize-space(value)"/>

        <xsl:variable name="code" select="substring-before($value,$space)"/>
        <xsl:variable name="string1" select="concat(
            substring-before($code,'/'),
            '/,',
            substring-after($code,'/'))"/>
        <xsl:variable name="string2" select="substring-before(
            substring-after($value,$space),
            $space)"/>
        <xsl:variable name="string3" select="substring-after(
            substring-after($value,$space),
            $space)"/>

        <xsl:value-of select="concat($string1,',',$string2,'~',$string3)"/>

    </xsl:template>

    <xsl:template match="name|value"/>  
</xsl:stylesheet> 


Your biggest problem is that value is you context node (defined in your template's match attribute), but you're referring to value in your XPath. This will look for a value node within the value node, which is obviously wrong.

In your <xsl:variable> and <xsl:value-of> statements, change refences to value to ., to refer to the current node instead.

I think that's probably not the only issue, but given that your template isn't going to match anything in that document anyway, it's difficult to derive where else it could be going wrong. One possible additional problem is that your substring-before(value,'&#13;') predicate within your <xsl:value-of> isn't going to return anything with the formatting given, as there's a newline before the 0101/etc... Now I think about it, that's also going to be issue in the substring-after in the previous line. That's very dependent on how it's actually formatted though, but from what you've given here, it is a problem.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜