There is no needs to use xsl:for-each instruction. I've tested using following code and it works as far as in my environment.
<?xml version="1.0" encoding="UTF-8"?>
exclude-result-prefixes="xs"
version="2.0">
<xsl:param name="prmInputXml" as="xs:string*" select="('a.xml','b.xml','c.xml','d.xml','e.xml','f.xml','g.xml')"/>
<xsl:variable name="prmInputMetFile" as="xs:string*" select="for $n in 1 to count($prmInputXml) return concat(substring-before($prmInputXml[$n],'.xml'),'.met')"/>
<xsl:variable name="metFileCollection" as="document-node()*" select="for $m in $prmInputMetFile return document($m)"/>
<xsl:variable name="cityCount" as="xs:integer*" select="for $d in $metFileCollection return $d//test[string(@name) eq 'city']/(if (count(tokenize(string(.),':|,')[. eq 'City']) gt 1) then 1 else 0)"/>
<xsl:template match="/">
<xsl:message select="'Double city file count=',sum($cityCount)"/>
</xsl:template>
</xsl:stylesheet>
a.met ... e.met