XSL 3.0如何优先处理指定子元素再处理其余元素(覆盖文档顺序)
XSLT 解决重复匹配元素的方案
针对你遇到的问题——在处理MFMATR元素时,想优先处理指定子元素(比如INTRO,或是TITLE、CHGDESC),同时保留其余元素的原始文档顺序,又不想显式列出所有标签、避免重复匹配,这里给你两个直接的解决办法:
1. 优先处理单个指定元素(如INTRO)
使用not(self::元素名)排除已选中的元素,确保只处理一次:
<xsl:apply-templates select="INTRO, *[not(self::INTRO)]"/>
这个写法会先匹配所有INTRO元素,再按原始顺序匹配除INTRO之外的所有其他子元素——既保证了优先级,又不会重复处理INTRO,还能兼容未知的新元素。
2. 优先处理多个指定元素(如TITLE、CHGDESC)
如果需要优先处理多个元素,在排除条件里用or连接即可:
<xsl:apply-templates select="TITLE, CHGDESC, *[not(self::TITLE or self::CHGDESC)]"/>
逻辑和单个元素一致:先处理TITLE和CHGDESC,再处理剩下的所有未指定元素,完全保留原始顺序,同时避免重复匹配。
这两种写法在Saxon处理器下完全兼容,不用硬编码所有可能的元素标签,扩展性更强。
内容的提问来源于stack exchange,提问作者KP99
相关产品推荐
相关产品推荐

