如何为多条件应用XSL模板?解决重复调用问题
解决方案
你的问题出在原始的select表达式会同时匹配data和data/item节点(当item存在时),导致模板被重复调用。要实现**仅当data/item存在时调用模板处理item,否则处理data**的逻辑,可以修改XPath选择器:
<xsl:apply-templates select="data/item | data[not(item)]" mode="testMode" />
逻辑说明
data/item:当data下存在item节点时,选中所有item元素,此时模板会作用于每个item。data[not(item)]:仅当data下没有item节点时,才选中data元素,此时模板作用于data本身。- 两者通过
|(并集运算符)组合,确保只会匹配其中一组节点,不会重复调用模板。
场景验证
- 对于你提供的示例XML(包含
data/item),只会选中item节点,模板会分别处理<item>AAA</item>和<item>BBB</item>。 - 如果
data下没有item节点,会选中data节点,模板仅处理一次data元素。
内容的提问来源于stack exchange,提问作者user24663487
相关产品推荐
相关产品推荐

