Удалять только пробелы - PullRequest
5 голосов
/ 07 июля 2010

Заданный элемент:

 <comments>  comments
go here
</comments>

Как я могу удалить несколько символов пробела? Я не могу использовать нормализованное пространство, потому что мне нужно сохранить новые строки и тому подобное. XSLT 2.0 нормально.

Ответы [ 2 ]

4 голосов
/ 07 июля 2010

В XPath 1.0 (также означает XSLT 1.0):

substring($input, 
          string-length(
                        substring-before($input, 
                                         substring(translate($input, ' ', ''), 
                                                   1,
                                                   1)
                                         )
                       ) +1
          )

Завернуто в XSLT-преобразование :

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

 <xsl:variable name="input"
   select="string(/*/text())"/>

 <xsl:template match="/">
   '<xsl:value-of select=
   "substring($input,
              string-length(
                            substring-before($input,
                            substring(translate($input, ' ', ''),
                                      1,
                                      1)
                                             )
                            ) +1
              )
   "/>'
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к следующему XML-документу :

<t>    XXX   YYY Z</t>

получается правильный желаемый результат :

   'XXX   YYY Z'
4 голосов
/ 07 июля 2010

Используйте функцию replace():

replace($input,'^ +','')

Обрабатывает начальные пробелы только до первого не пробела. Если вы хотите удалить все начальные пробельные символы (то есть пробел, nl, cr, tab) до первого непробельного символа, используйте:

replace($input,'^\s+','')
...