Удалить все символы \ n \ r из узла XSLT? - PullRequest
3 голосов
/ 16 февраля 2009

интересно, не могли бы вы помочь мне, пожалуйста? У меня есть узел в XML, который следующим образом

$ LOG: 08880xbpnd $
fhdsafidsfsd
DF
SD
фсд
f
SD
FSD

Мне было интересно, есть ли в любом случае, чтобы весь текст помещался в одну строку, чтобы потом его можно было передать в функцию javascript? так получилось бы вот так

$ LOG: 08880xbpnd $ fhdsafidsfsddfsdfsdfsdfsd

Ответы [ 2 ]

13 голосов
/ 16 февраля 2009

К сожалению, функция normalize-space() (используется в ответе andynormancx) делает больше, чем просто удаляет символы новой строки .

Удаляет все начальные и конечные пробелы, а заменяет любую группу внутренних конфликтующих пробелов одним пробелом .

Во многих случаях мы хотим удалить только один тип символа пробела (как в текущем случае - новые строки (CR + LF автоматически нормализуется при считывании анализатором XML только на LF).

Правильный и безопасный способ сделать это - использовать стандартную функцию XPath translate() :

translate(., '
', '')

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

Вот пример :

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="text()">
    <xsl:value-of 
     select="translate(.,'&#xA;','')"/>
  </xsl:template>
</xsl:stylesheet>

Когда вышеуказанное преобразование применяется к этому исходному XML-документу :

<t>
$LOG: 08880xbpnd $
"embedded    blanks    must    stay"
df
sd
fsd
f
sd
fsd
</t>

Результат находится только в одной строке, и все встроенные пробелы остаются без изменений :

<t>$LOG: 08880xbpnd $"embedded    blanks    must    stay"dfsdfsdfsdfsd</t>
7 голосов
/ 16 февраля 2009

Функция normalize-space () XPath должна делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...