Вы должны попробовать:
<xsl:value-of select="count(document($uri1)/api/query/pages/page/langlinks/ll)"/>
На другой ноте - что такое
translate(@title,' ','_')
должно означать? Что не так с:
translate(@title, ' ', '_')
Нет необходимости кодировать одинарные кавычки в атрибутах XML, если вы не хотите использовать тип кавычки, который разделяет значение атрибута. Все они действительны:
name="foo"'foo"
name='foo'"foo'
Вся ваша трансформация может быть сведена к следующему:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="text" />
<xsl:param name="baseUrl" select="'http://fr.wikipedia.org/w/api.php?action=query&format=xml&prop=langlinks&lllimit=500&titles='" />
<xsl:template match="ei">
<xsl:variable name="uri" select="concat($baseUrl ,translate(@title,' ','_'))"/>
<xsl:variable name="doc" select="document($uri)"/>
<xsl:value-of select="$uri"/>
<xsl:text> </xsl:text>
<xsl:text>count=</xsl:text>
<xsl:value-of select="count($doc/api/query/pages/page/langlinks/ll)"/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
Позвольте шаблонам XSLT по умолчанию работать на вас - они выполняют всю рекурсию в фоновом режиме, все, что вам нужно сделать, это перехватить узлы, которые вы хотите обработать (и предотвратить вывод ненужного текста, переопределив шаблон text()
по умолчанию с пустым).