2011-12-30 11 views
0

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

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

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). 

Что я делаю неправильно?

ответ

0

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

Примеры для функции String.Replace можно найти here

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

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

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

+0

Привет, спасибо за ваш ответ .. но fn: заменить fuction заменит текст исправления, но в моем случае .. мой текст замены не исправлен (например, gs, 2s:, 3s: в этом формате) , поэтому я должен применять regexp в нем .. и я запускаю свой xslt в Linux-сервере с поисковой системой solr. поэтому он дает ошибку в этом формате. – meghana

+0

Образец в функции replace ссылается на шаблон регулярного выражения –

+0

hmm ... я видел это .., но у меня нет доступа к нему в xslt 1.0 – meghana

1

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

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

Смежные вопросы