xslt использовать последние 15 символов, если длина больше 15 - PullRequest
0 голосов
/ 04 декабря 2018

Надеясь, что кто-то может помочь мне с этим, и я надеюсь, что я достаточно хорошо объясню это, чтобы кто-то смог понять.

В основном в отправляемом xml-файле есть тег "InvBatchNr" длинойэто значение может быть любым, однако система, в которую я пытаюсь загрузить, может принимать только 15 символов, поэтому я хочу, чтобы таблица стилей справилась с этой ситуацией.

Итак, если длина "InvBatchNr" равнабольше 15 символов, затем возьмите последние 15 символов, если не больше 15, то используйте полное значение «InvBatchNr»

Пример: XML содержит

<InvBatchNr>A00006_54324033_PRIMA01ES</InvBatchNr>

С таблицей стилей вВ этом примере я хочу извлечь '24033_PRIMA01ES'

Это то, что я пробовал до сих пор

<xsl:choose>
<xsl:when test="string-length('InvBatchNr') &gt; 15">
<xsl:value-of select="substring('InvBatchNr', string-length('InvBatchNr'), -15)"/>
</xsl:when>
<xsl:otherwise>
    <xsl:value-of select='InvBatchNr'/>
</xsl:otherwise>
</xsl:choose>

И несмотря на то, что это не дает мне никаких ошибок, возвращаемое значение фактически пустое.Любые указатели, где я иду не так, были бы хороши

Заранее спасибо Алан

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы ссылаетесь на элемент, InBatchNr не должно иметь кавычек вокруг имени элемента.Ваш пример - выбор строкового литерала вместо XPath для выбора элемента с именем InBatchNr.Измените string-length('InvBatchNr') &gt; 15 на string-length(InvBatchNr) &gt; 15, а также отрегулируйте внутри подстроки.

Если вы хотите выбрать substring() из последних 15 символов, вторым параметром должна быть позицияперсонажа, с которого нужно начать.Вы говорите, чтобы начать с позиции string-length() и продолжить для -15 символов.

Вместо этого вы хотите начать с string-length(InBatchNr) - 14, а затем либо указать чтение 15 символов, либо не указыватьтретий параметр, чтобы он читал до конца строки.

<xsl:choose>
  <xsl:when test="string-length(InvBatchNr) &gt; 15">
    <xsl:value-of select="substring(InvBatchNr, string-length(InvBatchNr) - 14)"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="InvBatchNr"/>
  </xsl:otherwise>
</xsl:choose>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...