как применить пространство между данными в xslt - PullRequest
8 голосов
/ 25 мая 2011

xml

      <block4>
          <tag>
            <name>50K</name>
            <value>
                0501/045788775099
                Praveen   // name will come 
                MENENDEZ Y PELAYOA CORUNA SPA // address will come
            </value>
         </tag>
      </block4>

Я написал xslt для этого тега выше, но у меня возникла проблема с заменой оставшейся длины пробелом, указанное выше значение, которое вы видите в средней строке, есть, допустим, дляэто XML-сообщение правее , которое мы получили для другого сообщения, которое мы можем получить, может быть получено Том , но максимальная длина равна 35 , поэтому нам нужно вычислить значение имени строки, оставшуюся длину, которую мыследует заменить на пробел, поэтому я не знаю, как заменить пробел там ...

xsl

<?xml version="1.0"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text" />   
 <xsl:template match="/">

      <xsl:for-each select ="block4/tag[name = '50K']">
 <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-         before(value,'&#13;'),6), ',',substring-after(value,'&#13;'))" />
  </xsl:for-each>
    </xsl:template>
  </xsl:stylesheet>

Ожидаемый выходной как:

0501 /, 045788775099,праве ............................ MENENDEZ Y PELAYOA CORUNA SPA

где точки представляют пробел не принимайте точки

мне нужно там место, предположим, что правеен равен 7 символам, а оставшиеся 28 символов должны занимать свободное место в xslt

Ответы [ 4 ]

13 голосов
/ 25 мая 2011

Попробуйте использовать

<xsl:text>        </xsl:text>

Пробел находится между этими тегами.

Для получения дополнительной информации: XSLT Управление пробелами

4 голосов
/ 25 мая 2011

допустим для этого сообщения xml Правин мы получили для другого Сообщение, которое мы можем сделать, может быть получено Томом, но максимальная длина 35, поэтому нам нужно вычислить значение имени строки оставшуюся длину мы должны заменить с пробелом, так что я не знаю, как заменить пространство там ...

Используйте

substring(concat($vstr, $vBlanks35), 1, 35)

Это дает результат объединения $vstr ('Правина') с $vBlanks35 (35 пробелов), а затем получения начальных 35 символов.

Вот полный пример:

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

 <xsl:variable name="vstr" select="'Praveen'"/>

 <xsl:variable name="vBlanks35" select=
      "'                                   '"/>

 <xsl:template match="/">
     "<xsl:value-of select=
       "substring(concat($vstr, $vBlanks35), 1, 35)"/>"
 </xsl:template>

</xsl:stylesheet>

когда это преобразование применяется к любому документу XML (не используется), получается нужный, правильный результат :

 "Praveen                            "
3 голосов
/ 25 мая 2011

Один (универсальный) способ добавить пробел в xml - это использовать специальный атрибут xml, который сохраняет пробелы:

<value xml:space="preserve"> 
        your 
        values 
        here ... 
</value>

Другой метод заключается в использовании XSL-резервирования / полосы ...

1 голос
/ 25 мая 2011

Вы должны использовать XSLT-версию функции SQL RPAD:

<xsl:template name="rpad">
  <xsl:param name="text" />
  <xsl:param name="length" />
  <xsl:param name="char" select="' '" />
  <xsl:if test="$length &gt; 0 and string-length($text) &gt; 0">
    <xsl:value-of select="$text" />
    <xsl:call-template name="rpad">
      <xsl:with-param name="text" select="$char" />
      <xsl:with-param name="char" select="$char" />
      <xsl:with-param name="length" select="$length - string-length($text)" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

Использование:

<xsl:call-template name="rpad">
  <xsl:with-param name="text" select="'your string here'" />
  <xsl:with-param name="length" select="35" />
</xsl:call-template>

При желании вы можете указать параметр char для дополнения строки символом, отличным отпространство.

...