XSL1.0如何筛选XML重复节点中符合指定规则的request元素
问题原因
你当前使用的XPath仅做了正向匹配:只要request节点下存在name为B/O/N的list就会被选中,没有额外做排除校验,既没有过滤掉同时包含E/G的节点,也没有保证request下所有list的name都仅属于B/O/N范围,因此会输出不符合要求的条目。
修正后的XSL模板
<xsl:template name="simplified"> <xsl:for-each select="categories/request[not(list[not(@name='B' or @name='O' or @name='N')])]"> <fo:block> <xsl:value-of select="@type"/> </fo:block> </xsl:for-each> </xsl:template>
筛选逻辑说明
not(list[not(@name='B' or @name='O' or @name='N')]) 条件的含义是:当前request节点下不存在任何name属性不属于{B,O,N}集合的list子节点,完全匹配你提出的三条筛选规则:
- 自动排除所有包含E/G的request节点(符合规则3)
- 保留的节点所有list的name都仅为B/O/N(符合规则1)
- 自然覆盖B搭配O/N的保留场景(符合规则2)
内容的提问来源于stack exchange,提问作者iwasaki
相关产品推荐
相关产品推荐

