Длина строки подстроки Xls начинается с - PullRequest
0 голосов
/ 22 февраля 2019

Я довольно новичок в xsl и мне нужна только эта часть, чтобы закончить с проектом.Таким образом, вместо того, чтобы делать много тестов и неудач, я думаю, что кто-то может решить это довольно легко.Я знаю программирование на других языках, так что я думаю, что для некоторых это будет простой случай?

Так вот в чем проблема.У меня есть шаблон, который выглядит примерно так:

<xsl:template name ="TemplateName1">
<xsl:param name ="ParmId1"/>
<cbc:Element1>
<xsl:choose>
<xsl:when test="$ParmId1= 'N15'">Net per 15 days</xsl:when>
<xsl:when test="$ParmId1= '15'">Net per 15 days</xsl:when>
</xsl:choose>
</cbc:Element1>
</xsl:template>

Мне нужен более динамичный подход.Я знаю, что параметр будет начинаться с буквы, а затем цифры, или это будут просто цифры.Это будет только 1-2 цифры в номере.Я хочу, чтобы результат выглядел следующим образом: "Net per 'parameter' days"

Если только параметр не начинается с буквы, то мне нужно изменить $ ParmId1, чтобы удалить первый символ.

* Обновление: первой буквой всегда будет буква «N» - примеры: 4, N4, 30, N30.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Если ваш параметр соответствует выражению ^N?[1234567890]+$, вы можете использовать функцию translate XPath:

translate($ParmId1,'N','')

Это просто удаляет любое возможное появление символа N изстрока.Более сложные решения доступны в новых версиях XPath / XSLT

0 голосов
/ 22 февраля 2019

При условии, что вы вводите как:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <Result>N30</Result>
</root>

Решение XSLT 1.0 для достижения того, что вы указали, может быть:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes" />

<xsl:template match="/root">
    <xsl:call-template name="TemplateName1">
        <xsl:with-param name="ParmId1" select="Result"/>
    </xsl:call-template>
</xsl:template>

<xsl:template name ="TemplateName1">
    <xsl:param name ="ParmId1"/>
      <cbc:Element1>
        <xsl:choose>
            <xsl:when test="starts-with($ParmId1, 'N')">Net per <xsl:value-of select="substring-after($ParmId1,'N')" /> days</xsl:when>
            <xsl:otherwise>Net per <xsl:value-of select="$ParmId1" /> days</xsl:otherwise>
       </xsl:choose>
    </cbc:Element1>
</xsl:template>

</xsl:stylesheet>

http://xsltransform.net/eieE3Q1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...