ошибка регулярного выражения в xslt 1.0 - PullRequest
0 голосов
/ 30 декабря 2011

Я использую xslt 1.0 для преобразования моего xml.

У меня есть эта строка:

hello 1s: This is very nice day. 9s: Christmas is about to come 14s: and christmas preparation is just on 25s: this is awesome!! 

Я хочу отформатировать ее так:

hello This is very nice day. Christmas is about to come and christmas preparation is just on this is awesome!! 

Чтобы сделать это, я попытался это xslt:

<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:regexp="http://exslt.org/regular-expressions"
                extension-element-prefixes="regexp"  >
<xsl:import href="regexp.xsl" />
  <xsl:template match='/'>
         <xsl:value-of select="regexp:replace(string(.), '[0-9]{1,4}s: ', 'g', '')" />
  </xsl:template>
</xsl:stylesheet>

но при запуске я получаю следующую ошибку:

java.lang.NoSuchMethodException: For extension function, could not find method java.lang.String.replace([ExpressionContext,] #STRING, #STRING, #STRING).

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

В XSLT 1.0 нет встроенной поддержки регулярных выражений. Функция EXSLT, которую вы вызываете, является сторонней спецификацией для функций расширения, которые могут быть доступны в некоторых процессорах; полученное сообщение об ошибке указывает на то, что оно недоступно для вашего конкретного процессора (или вам необходимо каким-то образом установить / настроить его для этого процессора).

Вы используете Java, поэтому не должно быть никаких препятствий для использования XSLT 2.0 в форме Saxon.

0 голосов
/ 30 декабря 2011

Как насчет использования fn: replace (строка, шаблон, replace) . Я не знаю, доступно ли это и в XSLT1.0; пожалуйста, проверьте.

Примеры для функции string.replace можно найти здесь

В соответствии с документацией в приведенной выше ссылке замена заменяет шаблон регулярных выражений.

Функция fn: replace заменяет части строки, которые соответствуют регулярному выражению. Используемый синтаксис регулярного выражения определяется XML-схемой с несколькими изменениями / дополнениями в XQueryXPath / XSLT. Аргумент $ pattern является регулярным выражением. Хотя хорошо иметь силу регулярных выражений, если вы просто хотите заменить определенную последовательность символов, вам не нужно быть знакомым с регулярными выражениями, чтобы сделать это; вы можете просто указать строку, которую хотите заменить, для $ pattern, если она не содержит специальных символов.

следовательно, вы можете использовать fn: replace (text (), '[0-9] {1,4} s:', '')

...