XSLT有条件地删除节点

时间:2014-10-31 22:40:18

标签: xml xslt

我有这样的XML:

<?xml version="1.0" encoding="UTF-8"?>
<Info>
    <Type>A</Type>
    <Cycle>
        <Code>A</Code>
        <CycleNumber>63-1</CycleNumber>
        <CycleDate>2014-10-15T00:00:00</CycleDate>
        <CycleNetAmount>2400.00</CycleNetAmount>
        <CycleTaxAmount>432.00</CycleTaxAmount>
        <CycleTotalAmount>2832.00</CycleTotalAmount>
        <CyclePayableAmountAsText/>
    </Cycle>
    <Cycle>
        <Code>B</Code>
        <CycleNumber>63-1</CycleNumber>
        <CycleDate>2014-10-15T00:00:00</CycleDate>
        <CycleNetAmount>400.00</CycleNetAmount>
        <CycleTaxAmount>72.00</CycleTaxAmount>
        <CycleTotalAmount>472.00</CycleTotalAmount>
        <CyclePayableAmountAsText/>
    </Cycle>
</Info>

如果Info / Type = A,我想删除Code = B的Cycle块。 如果Info / Type = B,我想删除Code = A的循环块。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

要在XSLT中“删除节点”,您希望复制除这些节点之外的所有内容。所以:从标识样式表开始(像往常一样),然后添加与要排除但不产生输出的节点匹配的模板。

在这种情况下,您要丢弃的元素可以描述为“任何循环,使其Code子元素的值与/ Info / Type元素的值匹配”,直接转换为

match="Cycle[Code=/Info/Type]"

还有其他方法可以一如既往地以不同的效率表达它......但这可能是最简单的解决方案。