使用XSLT筛选语言以'ian'结尾的国家名称的技术咨询
解决XSLT筛选语言以'ian'结尾的国家问题
首先看你原来的代码,核心问题出在筛选条件的写法上——你错误地对字符串'language'做了截取操作,而不是检查language元素的文本内容是否以ian结尾。下面是修正后的完整XSLT方案:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/"> <countries> <!-- 筛选包含以'ian'结尾的语言的国家 --> <xsl:for-each select="countries/country[language[ends-with(., 'ian')]]"> <country> <nom><xsl:value-of select="@name"/></nom> <idiomes> <!-- 只输出符合条件的语言,多语言用逗号分隔 --> <xsl:value-of select="language[ends-with(., 'ian')]" separator=", "/> </idiomes> </country> </xsl:for-each> </countries> </xsl:template> </xsl:stylesheet>
关键修正点说明:
- 筛选逻辑修正:
country[language[ends-with(., 'ian')]]里的.代表当前language元素的文本内容,ends-with()是XSLT 2.0自带的函数,专门用来检查字符串后缀,比手动截取更直观可靠。 - 语言输出优化:在
idiomes节点中,我们同样用ends-with(., 'ian')过滤,确保只输出符合条件的语言,同时通过separator=", "让多个语言之间用逗号分隔,格式更清晰。
如果需要兼容XSLT 1.0(部分旧环境不支持2.0),可以用substring函数手动截取末尾3个字符来判断,替换成以下筛选条件:
country[language[substring(., string-length(.) - 2) = 'ian']]
原理是计算字符串总长度,取最后3个字符与'ian'对比,效果和ends-with完全一致。
内容的提问来源于stack exchange,提问作者Mohamed A.B
相关产品推荐
相关产品推荐

