локальное пространство имен не выбирает несколько значений для сопоставления XSLT - PullRequest
0 голосов
/ 28 мая 2018

Ниже приведен мой xsl-файл, основанный на условии, что MaterialSalesText выбирает только первое значение.

<xsl:element name="DMI">
            <xsl:element name="D_808">F</xsl:element>
            <xsl:element name="S_723">
                <xsl:element name="D_801_7">
                <xsl:choose>
                <xsl:when test="../*[local-name()='SalesOrganisationID']='FAB' and ../*[local-name()='DistributionChannelCode']='SF'">                  
                            <xsl:value-of select="..//*[local-name()='MaterialSalesText']"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="Product/Note"/>
                        </xsl:otherwise>
                </xsl:choose>

SalesOrganisationID & DistributionChannelCode & MaterialSalesText находятся в локальном пространстве имен SalesOrganisationID & DistributionChannelCode находятся на уровне заголовка MaterialSalesText находятся на уровне Item / Product

Note находятся в своих собственных пространствах имен и на уровне Item / Product.

Note и material повторяются несколько раз на основе Item, основываясь на условии, что по-прежнему записывается только первое значение.

1 Ответ

0 голосов
/ 28 мая 2018

Вы уверены, что используете процессор XSLT 2 или 3 и для атрибута version в таблице стилей установлено значение <xsl:stylesheet version="2.0" ...>?Если вы используете процессор XSLT 1 или XSLT 2 или 3 в режиме обратной совместимости (который вы получили бы с version="1.0" в вашем коде), то любой xsl:value-of select="foo" выводит только строковое значение первого выбранного элемента foo.

Только с процессором XSLT 2 или 3 и правильным номером version в вашем коде xsl:value-of select="foo" должен выводить (разделенный пробелами) список всех значений foo.

...