2016-05-03 1 views
1

Кто-нибудь знает хороший шаблон для использования, который работает с XSLT 1.0?Использование XSLT 1.0, как вам получить только первое слово строки для сохранения переменной

Пример:

строка = «Здравствуйте, мои дорогие друзья, как вы делаете»

Я хочу, чтобы слово «Привет», и больше ничего.

+0

Это зависит от того, как вы определяете "слово". - P.S. Пожалуйста, просмотрите: [mcve] –

ответ

1

Как я уже сказал в комментарии, это зависит от того, как вы определяете слово «слово» - или, точнее, разделители слов. В вашем примере, это тривиально, чтобы извлечь "Hello" с помощью:

substring-before($string, ' ') 

Однако, это не будет работать, а, скажем:

"Hello, my dear friends: how are you doing?" 

или:

"Hello/Bye alternatives." 
+0

Мои извинения. «Слово», как в том, как регулярно люди его используют ... в этом примере «разделитель слов» всегда будет пространством («»), следующим за ним, которое определяет «слово». – user1869407

+0

Подстрока перед этим должна сделать трюк. Он просто будет искать первое пространство и захватить все перед ним, правильно? – user1869407

+1

«*« Слово »как в том, как регулярно люди его используют. *« Да, ну, компьютеры - это не люди. - В любом случае, если вы уверены, что за первым словом следует пробел, у вас есть свой ответ. –

0

Вот общий раствор с использованием FXSL Functional programming library for XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext"> 
<xsl:import href="strSplit-to-Words.xsl"/> 

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/*"> 
    <xsl:call-template name="str-split-to-words"> 
     <xsl:with-param name="pStr" select="."/> 
     <xsl:with-param name="pDelimiters" select="' ,:?./&#xA;'"/> 
    </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 

Когда это преобразование применяется на следующий документ XML:

<t> 
Hello, my dear friends: how are you doing? 
Buy/Sell recommendations. 
</t> 

разыскиваемый, правильный результат получается:

<word>Hello</word> 
<word>my</word> 
<word>dear</word> 
<word>friends</word> 
<word>how</word> 
<word>are</word> 
<word>you</word> 
<word>doing</word> 
<word>Buy</word> 
<word>Sell</word> 
<word>recommendations</word> 
<word/> 

Объяснение:

Этот код вызывает шаблон FXSL str-split-to-words. Можно указать параметр $pDelimiters, чтобы содержать строку, любой символ которой является разделителем, который должен быть распознан в токенизации.

Обратите внимание: Предполагается, что модуль таблицы стилей сохраняется в виде файла в том же каталоге, где FXSL проживает - в противном случае <xsl:import> директива должны быть изменены с точным FilePath в этот каталог.

В основе FXSL объясняется здесь: http://fxsl.sourceforge.net/