Удаление пробелов внутри кавычек в XSLT - PullRequest
3 голосов
/ 13 марта 2010

Я пытаюсь отформатировать таблицу из XML. Допустим, у меня есть эта строка в XML

<country>Dominican Republic</country>

Я бы хотел, чтобы мой стол выглядел так

<td class="country DominicanRepublic">Dominican Republic</td>

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

<td class="country {country}"><xsl:value-of select="country"/></td>

тогда это:

<xsl:element name="td">
 <xsl:attribute name="class">
  <xsl:text>country </xsl:text>
  <xsl:value-of select="normalize-space(country)"/>
 </xsl:attribute>
<xsl:value-of select="country"/>
</xsl:element>

normalize-space() не удаляет пробел между двумя частями имени, и я не могу использовать <xsl:strip-space elements="country"/>, потому что мне нужно пространство, когда я отображаю имя внутри ячейки таблицы.

Как я могу убрать пробел из значения внутри класса, но не из текста в ячейке?

Ответы [ 2 ]

11 голосов
/ 13 марта 2010

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

<xsl:element name="td">
    <xsl:attribute name="class">
        <xsl:text>country </xsl:text>
        <xsl:value-of select="translate(country,' ','')"/>
        </xsl:attribute>
    <xsl:value-of select="country"/>
</xsl:element>

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

<xsl:element name="td">
   <xsl:attribute name="class">
    <xsl:text>country </xsl:text>
    <xsl:value-of select="translate(normalize-space(country),' ','')"/>
    </xsl:attribute>
    <xsl:value-of select="normalize-space(country)"/>
</xsl:element>
1 голос
/ 13 марта 2010

Вам нужно будет рекурсивно разбивать вашу строку на пробелы, взгляните на эту тему: Имеет ли XSLT функцию Split ()?

Или вы можете попробовать заменить эту реализацию функции: http://geekswithblogs.net/Erik/archive/2008/04/01/120915.aspx

...