как составить более двух требований одновременно - PullRequest
0 голосов
/ 06 июня 2011

Привет, все, что я написал логику, основанную на требовании, чтобы в моем коде xslt содержалось более двух данных одновременно, но я не достиг ожидаемого результата, может кто-нибудь дать некоторые предложения1003 *

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

Я написал здесь xslt:

<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>

Это правильно или нет?может кто-нибудь помочь

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Я даю вам полный рабочий пример, основанный на ваших данных.Несколько замечаний:

  • Используйте normalize-space() и разделите строку на пробелы.
  • Просто поиграйте с substring-before и substring-after.
  • , убедитесь, чтоиспользуйте 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> 
0 голосов
/ 06 июня 2011

Ваша самая большая проблема в том, что value - это ваш контекстный узел (определенный в атрибуте match вашего шаблона), но вы ссылаетесь на value в вашем XPath.При этом будет выполняться поиск узла value в узле value, что явно неверно.

В своих операторах <xsl:variable> и <xsl:value-of> измените ссылки на value на ., чтобывместо этого обратитесь к текущему узлу.

Я думаю, что это, вероятно, не единственная проблема, но, учитывая, что ваш шаблон в любом случае не будет соответствовать чему-либо в этом документе, трудно определить, где еще он может работать неправильно,Одна возможная дополнительная проблема заключается в том, что ваш предикат substring-before(value,'&#13;') в пределах вашего <xsl:value-of> не будет ничего возвращать с заданным форматированием, так как перед 0101/etc.. стоит новая строка.Теперь я думаю об этом, это также будет проблемой в substring-after в предыдущей строке.Это очень зависит от того, как он на самом деле отформатирован, но из того, что вы здесь дали, это проблема.

...