选择XSLT1.0或2.0后进行Concate

选择XSLT1.0或2.0后进行Concate,xslt,xslt-2.0,Xslt,Xslt 2.0,对于这个论坛和XSLT来说还是新的,已经搜索过了,但是找不到正确的解决方案 我试图在选择后得到正确的concat,如果我符合条件208或906仍然是get LX1234作为组合,它总是以另一个作为解决方案结束。XSLT是在2.0中构建的,因此这两种解决方案都适用于我 <xsl:for-each select="XXX/Envelope/PickingList/Line/Lot"> <articleLine type="tag">

对于这个论坛和XSLT来说还是新的,已经搜索过了,但是找不到正确的解决方案

我试图在选择后得到正确的concat,如果我符合条件208或906仍然是get LX1234作为组合,它总是以另一个作为解决方案结束。XSLT是在2.0中构建的,因此这两种解决方案都适用于我

<xsl:for-each select="XXX/Envelope/PickingList/Line/Lot">
                <articleLine type="tag">
                    <articleCode>
                        <xsl:choose>
                            <xsl:when test="XXX/Envelope/GLN_Supplier =208">

                                 <xsl:value-of select="concat('AV',../ArticleCodeSupplier)"/> 
                            </xsl:when>
                            <xsl:when test="XXX/Envelope/GLN_Supplier =906">

                                <xsl:value-of select="concat('KR',../ArticleCodeSupplier)"/> 
                            </xsl:when>
                            <xsl:otherwise>
                                 <xsl:value-of select="concat('LX',../ArticleCodeSupplier)"/>

                            </xsl:otherwise>
                        </xsl:choose>
                    </articleCode>

编辑XML输入,感谢您指出@michael.hor257k



<?xml version='1.0' encoding='ISO-8859-1'?>
<XXX>
    <Envelope>
        <InterchangeControlReference>995566</InterchangeControlReference>
        <GLN_Supplier>906</GLN_Supplier>
        <GLN_Customer>541</GLN_Customer>
        <PickingList>
            <PickingListNumber>9</PickingListNumber>
            <PickingDate>2019-08-01</PickingDate>
            <OrderNumberSupplier>12345</OrderNumberSupplier>
            <OrderNumberCustomer>EDI Test 1</OrderNumberCustomer>
            <EarliestDeliveryDate>2019-10-09</EarliestDeliveryDate>
            <EarliestDeliveryTime>14:13:39</EarliestDeliveryTime>
            <LastDeliveryDate>2019-10-09</LastDeliveryDate>
            <LastDeliveryTime>14:13:39</LastDeliveryTime>
            <GLN_Supplier>215</GLN_Supplier>
            <GLN_WarehouseAddressSupplier>541</GLN_WarehouseAddressSupplier>
            <GLN_Customer>000</GLN_Customer>
            <GLN_DeliveryAddressCustomer>000</GLN_DeliveryAddressCustomer>
            <GLN_CarrierAddressCustomer></GLN_CarrierAddressCustomer>
            <DeliveryName>CLIENTNAME</DeliveryName>
            <DeliveryNameContactperson></DeliveryNameContactperson>
            <DeliveryTelephoneNumber></DeliveryTelephoneNumber>
            <DeliveryAddress>CLIENTADDRESS</DeliveryAddress>
            <DeliveryAddress2></DeliveryAddress2>
            <DeliveryHouseNumber>0</DeliveryHouseNumber>
            <DeliveryHouseNumberExtra></DeliveryHouseNumberExtra>
            <DeliveryPostalCode>1111 aa</DeliveryPostalCode>
            <DeliveryCity>PLACE</DeliveryCity>
            <DeliveryCountryISO>NL</DeliveryCountryISO>
            <DeliveryCustomsExcise></DeliveryCustomsExcise>
            <DeliveryMethod>DDP</DeliveryMethod>
            <DeliveryIncoterm>DDP</DeliveryIncoterm>
            <DeliveryIncotermCity></DeliveryIncotermCity>
            <Remarks_Pickinglist>REMARKS WAREHOUSE</Remarks_Pickinglist>
            <Remarks_Packinglist>REMARKS FREIGHTBILL</Remarks_Packinglist>
            <Remarks_Delivery></Remarks_Delivery>
            <CustomsExcise>true</CustomsExcise>
            <Test>false</Test>
            <Line>
                <LineNumber>1</LineNumber>
                <EAN_Article>528</EAN_Article>
                <ArticleCodeSupplier>1234</ArticleCodeSupplier>
                <ArticleCodeCustomer></ArticleCodeCustomer>
                <UnitToPick>Fles</UnitToPick>
                <ArticleDescription>VINE WINE</ArticleDescription>
                <QuantityToPick>21</QuantityToPick>
                <QuantityToPickInOrderUnit>21</QuantityToPickInOrderUnit>
                <UnitOrdered>Fles</UnitOrdered>
                <Lot>
                    <LotCode>72</LotCode>
                    <BatchCode>3</BatchCode>
                    <YearOfProduction>2017</YearOfProduction>
                    <QuantityToPick>21</QuantityToPick>
                </Lot>
            </Line>
            <Line>
                <LineNumber>2</LineNumber>
                <EAN_Article>081</EAN_Article>
                <ArticleCodeSupplier>5678</ArticleCodeSupplier>
                <ArticleCodeCustomer></ArticleCodeCustomer>
                <UnitToPick>Fles</UnitToPick>
                <ArticleDescription>CHAMPAGNE</ArticleDescription>
                <QuantityToPick>10</QuantityToPick>
                <CountryOfOriginISO>ES</CountryOfOriginISO>
                <QuantityToPickInOrderUnit>10</QuantityToPickInOrderUnit>
                <UnitOrdered>Fles</UnitOrdered>
                <Lot>
                    <LotCode>5</LotCode>
                    <BatchCode>4</BatchCode>
                    <YearOfProduction>2019</YearOfProduction>
                    <QuantityToPick>10</QuantityToPick>
                    <CountryOfOriginISO>ES</CountryOfOriginISO>
                </Lot>
            </Line>
        </PickingList>
    </Envelope>
</XXX>


995566
906
541
9
2019-08-01
12345
电子数据交换测试1
2019-10-09
14:13:39
2019-10-09
14:13:39
215
541
000
000
客户名称
客户地址
0
1111 aa
放置
NL
顺铂
顺铂
备注仓库
备注运单
真的
假的
1.
528
1234
弗莱斯
葡萄酒
21
21
弗莱斯
72
3.
2017
21
2.
081
5678
弗莱斯
香槟
10
锿
10
弗莱斯
5.
4.
2019
10
锿
说明:

<xsl:for-each select="XXX/Envelope/PickingList/Line/Lot">
将返回false,因为路径
XXX/Envelope/GLN\u供应商
未选择任何内容。如果将路径设置为绝对路径,则会得到不同的结果:

 <xsl:when test="/XXX/Envelope/GLN_Supplier =208">

请显示XML输入-请参见:。亲爱的Michael,这将起作用,但正如您所提到的,效率总是比XSLT好,我只是从XSLT开始,所以我不知道如何做到这一点。请参见我答案的补充部分。请注意,如果每条
线路
都有一个
批次
,您可以进一步简化它。我开始时每条线路都有一个批次,但客户让我惊讶的是,每条线路都可能有多个批次。谢谢你的时间和帮助,我又学到了一些东西,希望其他人也能从中学到一些东西。但是你没有从中吸取任何东西。如果一行有两个批次,结果将显示两个相同的
articleLine
双胞胎。
 <xsl:when test="/XXX/Envelope/GLN_Supplier =208">
<xsl:template match="/XXX">
    <output>
        <xsl:variable name="articleCodePrefix">
            <xsl:choose>
                <xsl:when test="Envelope/GLN_Supplier=208">AV</xsl:when>
                <xsl:when test="Envelope/GLN_Supplier=906">KR</xsl:when>
                <xsl:otherwise>LX</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:for-each select="Envelope/PickingList/Line/Lot">
            <articleLine type="tag">
                <articleCode>
                    <xsl:value-of select="$articleCodePrefix"/> 
                    <xsl:value-of select="../ArticleCodeSupplier"/>
                </articleCode>
            </articleLine>
        </xsl:for-each>
    </output>
</xsl:template>