在输入文件中,如果despatchAdviceLineItem包含字段serialNumber(如果存在),那么我们需要删除相应的despatchAdviceLineItem。请通过XSLT代码帮助我,以提供此要求,并提供输入和输出详细信息。
输入和输出:
<despatchAdviceLogisticUnit>
<logisticUnitIdentification>
<sscc>200000000000000001</sscc>
</logisticUnitIdentification>
<despatchAdviceLineItem>
<lineItemNumber>5001</lineItemNumber>
<transactionalTradeItem>
<gtin>18901148101194</gtin>
<transactionalItemData>
<lotNumber>283763</lotNumber>
<tradeItemQuantity>600</tradeItemQuantity>
</transactionalItemData>
</transactionalTradeItem>
</despatchAdviceLineItem>
<despatchAdviceLineItem>
<lineItemNumber>5002</lineItemNumber>
<transactionalTradeItem>
<gtin>18901148101194</gtin>
<transactionalItemData>
<lotNumber>296474</lotNumber>
<tradeItemQuantity>400</tradeItemQuantity>
</transactionalItemData>
</transactionalTradeItem>
</despatchAdviceLineItem>
<despatchAdviceLineItem>
<lineItemNumber>5002</lineItemNumber>
<transactionalTradeItem>
<gtin>18901148101194</gtin>
<transactionalItemData>
<lotNumber>296474</lotNumber>
<serialNumber>SN00000000001</serialNumber>
<tradeItemQuantity>2</tradeItemQuantity>
</transactionalItemData>
</transactionalTradeItem>
</despatchAdviceLineItem>
</despatchAdviceLogisticUnit>
Desired output:
<despatchAdviceLogisticUnit>
<logisticUnitIdentification>
<sscc>200000000000000001</sscc>
</logisticUnitIdentification>
<despatchAdviceLineItem>
<lineItemNumber>5001</lineItemNumber>
<transactionalTradeItem>
<gtin>18901148101194</gtin>
<transactionalItemData>
<lotNumber>283763</lotNumber>
<tradeItemQuantity>600</tradeItemQuantity>
</transactionalItemData>
</transactionalTradeItem>
</despatchAdviceLineItem>
<despatchAdviceLineItem>
<lineItemNumber>5002</lineItemNumber>
<transactionalTradeItem>
<gtin>18901148101194</gtin>
<transactionalItemData>
<lotNumber>296474</lotNumber>
<tradeItemQuantity>400</tradeItemQuantity>
</transactionalItemData>
</transactionalTradeItem>
</despatchAdviceLineItem>
</despatchAdviceLogisticUnit> ```
所有这些代码都以可以在XSLT 3中声明的身份转换模板开始
<xsl:mode on-no-match="shallow-copy"/>
然后,您只需为不想复制的元素添加一个空模板,例如
<xsl:template match="despatchAdviceLineItem[.//serialNumber]"/>
您可以在https://xsltfiddle.liberty-development.net/a9GPfL处看到它的运行状态。
对于较早的版本,您需要拼写身份转换模板,而不是使用xsl:mode
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="despatchAdviceLineItem[.//serialNumber]"/>