XSLT排除特定标签

毫米波

我有一个问题试图在XSLT中解决,但是我找不到解决方案。以下示例与支付系统有关,该系统将商品添加到购物篮中然后将其删除。out XML提供了对一篮子操作的审核跟踪。

场景:

添加项目(编号1)

添加价格变化的商品(编号1)

无效物品(编号1)

无效物品(编号1)价格有变动

添加项目(编号1)

添加项目(编号1)

预期结果

去掉:

添加项目(编号1)

添加价格变化的商品(编号1)

输出XML包含

无效物品(编号1)

无效物品(编号1)价格有变动

添加项目(编号1)

添加项目(编号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个无效商品,则应该只删除一个没有无效但标签与商品完全相同的商品

马修·格林(Matthew Green)

假设您products始终按顺序显示,则可以检查前面的兄弟姐妹是否为true,然后比较item_id由于您的前两个项目之前没有无效交易,因此不会对其进行处理。因此,您可以将if语句更新为以下内容:

<xsl:if test="item_id = preceding-sibling::product[@void='true']/item_id">

这将与您的预期输出匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

BeautifulSoup排除特定标签中的内容

来自分类Dev

XSLT 按特定标签分组

来自分类Dev

XSLT:在特定标签处分解标签结构

来自分类Dev

XSLT输出元素转换为特定标签HTML

来自分类Dev

如果特定标签的属性包含使用 XSLT 的特定单词,如何附加到特定标签

来自分类Dev

获取特定标签

来自分类Dev

寻找特定标签

来自分类Dev

从嵌套的HTML中提取文本内容,同时排除某些特定标签;cra草

来自分类Dev

woocommerce:如何从Woocommerce REST API中排除某些具有特定标签ID的产品

来自分类Dev

报废:如何使用bS4排除特定标签

来自分类Dev

HTML中的C#正则表达式查找短语排除特定标签

来自分类Dev

从xml删除特定标签

来自分类Dev

jQuery选择特定标签

来自分类Dev

剥离特定标签的内容

来自分类Dev

从特定标签获取文本

来自分类Dev

从网页获取特定标签

来自分类Dev

如何替换包含选定标签的特定标签

来自分类Dev

如何仅获取elementsByClassName的特定标签?

来自分类Dev

删除特定标签内的内容

来自分类Dev

如何使用Egit签出特定标签?

来自分类Dev

使用BeautifulSoup查找特定标签

来自分类Dev

限制HTMLPurifier接受特定标签

来自分类Dev

更新到liquibase中的特定标签

来自分类Dev

解析XML文件中的特定标签

来自分类Dev

仅显示ggplot图例的特定标签

来自分类Dev

搜索并替换特定标签之间的内容

来自分类Dev

使用git子树签出特定标签

来自分类Dev

从任意纯文本扩展特定标签

来自分类Dev

AgilityPack选择innerText但跳过特定标签