选择XSLT1.0或2.0后进行Concate
对于这个论坛和XSLT来说还是新的,已经搜索过了,但是找不到正确的解决方案 我试图在选择后得到正确的concat,如果我符合条件208或906仍然是get LX1234作为组合,它总是以另一个作为解决方案结束。XSLT是在2.0中构建的,因此这两种解决方案都适用于我选择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">
<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>