我有一个问题,我试图在 XSLT 中解决,但我无法找到解决方案。下面的示例与一个支付系统相关,它将项目添加到篮子然后删除它们。输出 XML 提供对篮子执行的操作的审计跟踪。
塞纳里奥:
添加项目(ID 1)
添加项目 (Id 1) 并更改价格
无效物品 (Id 1)
无效项目 (Id 1) 有价格变化
添加项目(ID 1)
添加项目(ID 1)
预期结果
消除:
添加项目(ID 1)
添加项目 (Id 1) 并更改价格
输出 XML 包含
无效物品 (Id 1)
无效项目 (Id 1) 有价格变化
添加项目(ID 1)
添加项目(ID 1)
输入 XML:
<xml>
<product void="false">
<sequence_number>1</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
<product void="false">
<sequence_number>2</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
<price_change>
<price>10</price>
</price_change>
</product>
<product void="true">
<sequence_number>3</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
<price_change>
<price>10</price>
</price_change>
</product>
<product void="true">
<sequence_number>4</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
<product void="false">
<sequence_number>5</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
<product void="false">
<sequence_number>6</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
</xml>
预期结果:
<xml>
<product void="true">
<sequence_number>3</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
<price_change>
<price>10</price>
</price_change>
</product>
<product void="true">
<sequence_number>4</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
<product void="false">
<sequence_number>5</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
<product void="false">
<sequence_number>6</sequence_number>
<item_id>11111111</item_id>
<price>12</price>
</product>
</xml>
XSLT
<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="//product[@void='false']">
<xsl:if test="item_id != //product[@void='true']/item_id">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
这样做的问题是它正在删除所有未作废且具有相同 ID 的产品,并且没有考虑作废商品的数量与非作废商品的数量。
如果您有 1 件无效商品,则应仅删除一件未作废但标签与其自身完全相同的商品