您用 saxon 标签标记了您的问题,所以我假设您使用的是 xslt 2.0。
您可以使一个变量保持值被跳过
<xsl:variable name="skip">
<abbr>A</abbr>
<abbr>C</abbr>
</xsl:variable>
然后你可以针对这个变量测试节点的属性
<xsl:apply-templates select="cities/city[not(@abbr = $skip/abbr)]" />
所以对于输入
<?xml version="1.0" encoding="UTF-8"?>
<cities>
<city abbr='A'>NameA1</city>
<city abbr='B'>NameB1</city>
<city abbr='C'>NameC1</city>
<city abbr='A'>NameA2</city>
<city abbr='B'>NameB2</city>
<city abbr='C'>NameC2</city>
</cities>
关注 xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="skip">
<abbr>A</abbr>
<abbr>C</abbr>
</xsl:variable>
<xsl:template match="/">
<cities>
<xsl:apply-templates select="cities/city[not(@abbr = $skip/abbr)]" />
</cities>
</xsl:template>
<xsl:template match="city">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
产生输出
<?xml version="1.0" encoding="UTF-8"?>
<cities xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<city abbr="B">NameB1</city>
<city abbr="B">NameB2</city>
</cities>
编辑:
将过滤器存储在外部文件中是有意义的。让skip.xml 是这样的具有结构的文件
<?xml version="1.0" encoding="UTF-8"?>
<skip>
<abbr>A</abbr>
<abbr>C</abbr>
</skip>
然后您可以通过以下方式更改变量声明
<xsl:variable name="skip" select="document('path/to/skip.xml')/skip/abbr" />
其他事情可能保持不变。