我的有效载荷如下
<order>
<ordernumber>1-123
</ordernumber>
<orderline>
<linenumber>root
</linenumber>
<parentnumber>
</parentnumber>
<type>order
</type>
<actioncode>Existing
</actioncode>
</orderline>
<orderline>
<linenumber>x1
</linenumber>
<parentnumber>root
</parentnumber>
<type>Bundle
</type>
<actioncode>Existing
</actioncode>
</orderline>
<orderline>
<linenumber>xsub1
</linenumber>
<parentnumber>x1
</parentnumber>
<type>Bundle
</type>
<actioncode>Existing
</actioncode>
</orderline>
<orderline>
<linenumber>xsub2
</linenumber>
<parentnumber>x1
</parentnumber>
<type>Bundle
</type>
<actioncode>ADD
</actioncode>
</orderline>
<orderline>
<linenumber>xsub3
</linenumber>
<parentnumber>x1
</parentnumber>
<type>Bundle
</type>
<actioncode>Existing
</actioncode>
</orderline>
</order>
我想只保留orderline = ADD
及其父订单行,如下所示
<order>
<ordernumber>1-123
</ordernumber>
<orderline>
<linenumber>x1
</linenumber>
<parentnumber>root
</parentnumber>
<type>Bundle
</type>
<actioncode>Existing
</actioncode>
</orderline>
<orderline>
<linenumber>xsub2
</linenumber>
<parentnumber>x1
</parentnumber>
<type>Bundle
</type>
<actioncode>ADD
</actioncode>
</orderline>
</order>
我尝试使用身份功能,但无法弄清楚逻辑...... 你能帮我么 提前谢谢
这是我尝试过的,但我无法弄清楚如何获取Xsub2的父行项actioncode = 'ADD'
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/order/orderline[actioncode !='ADD']"/>
</xsl:stylesheet>
答案 0 :(得分:3)
我建议采用不同的方法:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="parent" match="orderline" use="linenumber" />
<xsl:template match="/order">
<xsl:copy>
<xsl:copy-of select="ordernumber"/>
<xsl:for-each select="orderline[actioncode ='ADD']">
<xsl:copy-of select=". | key('parent', parentnumber)"/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>