как убрать лишние пробелы значений элементов в xslt - PullRequest
3 голосов
/ 16 марта 2012

Я хочу убрать пробелы в значениях элемента.

Источник:

   <sss>
      HI:
      HELLO:
      HOW:
    </sss>

Выход:

    <sss>HI:HELLO:HOW

Я пробовал это

    <xsl:strip-space elements="*"/>

но это не влияет на вывод.

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Если вы хотите удалить символ или более, используйте переводчик, перечисляющий символы в качестве второго аргумента, и пустую строку в качестве третьего translate(., ' ', ''), например,

<xsl:template match="sss">
  <xsl:copy>
    <xsl:value-of select="translate(normalize-space(), ' ', '')"/>
  </xsl:copy>
</xsl:template>
0 голосов
/ 16 марта 2012

Чтобы получить результат со всеми удаленными пробелами, используйте стандартную функцию XPath translate() :

translate(., ' &#xA;&#xD;&#xC;&#9;', '')

В нет необходимости , чтобы использовать normalize-space() вообще.

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

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

Полное преобразование включает в себя также правило идентификации, поэтому, если документ XML содержит элементы, отличные от sss, они будут скопированы «как есть»:

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

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

 <xsl:template match="sss/text()">
     <xsl:value-of select="translate(., ' &#xA;&#xD;&#xC;&#9;', '')"/>
 </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...