получение динамической c подстроки xslt - PullRequest
0 голосов
/ 14 февраля 2020

Я довольно новичок во всех разработках / использовании XSLT, но для работы мы должны использовать это сейчас. Я занят отображением сообщений из приложения A в B, и я сталкиваюсь с чем-то, на что не могу найти ответ.

в качестве поля ввода у меня есть <sys_external_id>201000077_G001_S20_H10</sys_external_id>

Теперь я создал ниже:

<stopNumber>
    <xsl:value-of select="substring(sys_external_id, 16, 4)" /> 
</stopNumber>

<stopHandlingNumber>
    <xsl:value-of select="substring(sys_external_id, 20, 4)" /> 
</stopHandlingNumber>

это дает мне на данный момент правильный ответ (S20 и H10), теперь «проблема» в том, что значения S20 и H10 могут различаться. например, значение может быть S2100 или H110. также G001 также может отличаться.

Подстрока после не работает, потому что я не могу определить, где находится мой конец (насколько я знаю)

1 Ответ

1 голос
/ 14 февраля 2020

В XSLT 2.0 вы можете сделать:

<xsl:variable name="tokens" select="tokenize(sys_external_id, '_')" />

<stopNumber>
    <xsl:value-of select="$tokens[3]" /> 
</stopNumber>

<stopHandlingNumber>
    <xsl:value-of select="$tokens[4]" /> 
</stopHandlingNumber>

Если вы ограничены XSLT 1.0, то это может быть:

<xsl:variable name="tail" select="substring-after(substring-after(sys_external_id, '_'), '_')" />

<stopNumber>
    <xsl:value-of select="substring-before($tail, '_')" /> 
</stopNumber>

<stopHandlingNumber>
    <xsl:value-of select="substring-after($tail, '_')" /> 
</stopHandlingNumber>

Это предполагает, что входная строка просто последовательность токенов, разделенных подчеркиванием.


Обратите также внимание, что некоторые процессоры XSLT 1.0 поддерживают функцию расширения EXSLT str:tokenize().

...