Подстрока, функция длины строки в xslt - PullRequest
3 голосов
/ 18 июня 2009

В основном у меня есть строка, созданная из цикла, разделенного запятыми, например. А, В, С, Я хочу избавиться от последней запятой.

<xsl:variable name="myConcatString">
   <xsl:for-each select="valueinElement">
        <xsl:value-of select="@attributeValue"/>,
   </xsl:for-each>
</xsl:variable>


<xsl:variable name="valueLength" select="string-length($myConcatString)-1"/>
<xsl:value-of select="substring($myConcatString,1,$valueLength)"/>

Теперь последняя строка должна давать мне A, B, C без "," в последней. Может кто-нибудь сказать мне, что идет не так?

Ответы [ 2 ]

7 голосов
/ 18 июня 2009

Вы выводите пробелы из-за того, как вы отформатировали XML. Вы можете исправить это двумя способами. Один из них - просто удалить форматирование:

<xsl:for-each select="valueinElement"><xsl:value-of select="@attributeValue"/>,</xsl:for-each>

Другой, более надежный способ - изменить способ обработки пробелов:

<xsl:for-each select="valueinElement">
  <xsl:value-of select="@attributeValue"/>
  <xsl:text>,</xsl:text>
</xsl:for-each>

То, что это делает, обрабатывает только запятую как элемент, так что она игнорирует окружающие пробелы, вместо того, чтобы обрабатывать все пробелы внутри цикла for-each как часть вывода.

Для справки я запустил приведенные выше фрагменты XSLT для следующего XML-файла:

<root>
  <valueinElement attributeValue="dogs"/>
  <valueinElement attributeValue="cats"/>
  <valueinElement attributeValue="mice"/>
  <valueinElement attributeValue="lasers"/>
  <valueinElement attributeValue="frogs"/>
</root>

И получил следующий вывод в обоих случаях:

dogs,cats,mice,lasers,frogs
4 голосов
/ 17 декабря 2012

Просто используйте эту замену, она исправит ваш вывод.

<xsl:value-of select="substring($myConcatString,1,$valueLength)"/>

с

<xsl:value-of select="substring($myConcatString,0,$valueLength)"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...