XSL match规则如何编写筛选country为Russia或Kaliningrad的OR条件
错误原因
你之前的写法不生效,是因为XPath 1.0中|是节点集合并运算符,不是字符串匹配的或逻辑,country='Russia|Kaliningrad'的含义是判断country节点的文本是否等于字符串Russia|Kaliningrad,自然匹配不到你要的结果。
正确语法
你只需要在筛选条件里用or运算符拼接两个等值判断即可,修改后的匹配规则如下:
<xsl:template match="marker[not(country='Russia' or country='Kaliningrad')]"/>
完整可用的XSL样式表
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <!-- 移除country既不是Russia也不是Kaliningrad的marker节点 --> <xsl:template match="marker[not(country='Russia' or country='Kaliningrad')]"/> <!-- 标识模板,其余节点原样复制 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
输出结果
应用上述样式表后,得到的XML结果如下(注:原XML中存在两处name结束标签误写为nane的笔误,以下为修正后输出):
<bases> <marker> <name>whatever</name> <city>Svetly</city> <country>Kaliningrad</country> </marker> <marker> <name>whatever</name> <city>Moscow</city> <country>Russia</country> </marker> </bases>
内容的提问来源于stack exchange,提问作者Ed S.
相关产品推荐
相关产品推荐

