В содержимом элемента моего исходного XML-файла есть 2321 вхождение символа 'a'.
Мне удалось получить это число, но я могу сделать это только для символа «а».
Мне нужно получить вхождения для всех букв алфавита.
См. Код:
Используется для распечатки элемента TextBlock:
<xsl:template name="get-textblock">
<xsl:param name="letter-one"/>
<xsl:param name="letter-two"/>
<xsl:param name="letter-one-f"/>
<xsl:param name="letter-two-f"/>
<xsl:if test="$letter-one">
<xsl:number value="$letter-one" format="$letter-one-f"/>
</xsl:if>
<xsl:if test="$letter-two">
<xsl:number value="$letter-two" format="$letter-two-f"/>
</xsl:if>
</xsl:template>
Затем в этом рекурсивном цикле я распечатываю, сколько раз встречается «a» или «A»,
используя выражение XPath и шаблон get-textblock.
<xsl:template name="print-alphabet-value-rows">
<!-- 'letter' is just a counter. -->
<xsl:param name="letter" select="1"/>
<!-- numbers -->
<xsl:param name="letter-one" select="1"/>
<xsl:param name="letter-two" select="1"/>
<!-- format attribute values -->
<xsl:param name="letter-one-f" select=" 'a' "/>
<xsl:param name="letter-two-f" select=" 'A' "/>
<xsl:param name="gridrow">2</xsl:param>
<xsl:param name="gridcol">2</xsl:param>
<xsl:call-template name="get-textblock">
<xsl:with-param name="gridrow" select="$gridrow"/>
<xsl:with-param name="gridcol" select="$gridcol"/>
<xsl:with-param name="style">{StaticResource ValueText}</xsl:with-param>
<xsl:with-param name="letter-one-f" select="$letter-one-f"/>
<xsl:with-param name="letter-two-f" select="$letter-two-f"/>
<xsl:with-param name="letter-one" select="$letter-one"/>
<xsl:with-param name="letter-two" select="$letter-two"/>
<xsl:with-param name="text">
<xsl:value-of select="count(/n-grams-sorted/n-gram[starts-with(.,$letter-one-f) or starts-with(.,$letter-two-f) ])"/>
</xsl:with-param>
</xsl:call-template>
<xsl:if test="$letter < 26">
<xsl:call-template name="print-alphabet-value-rows">
<xsl:with-param name="gridrow" select="$gridrow + 1"/>
<xsl:with-param name="letter" select="$letter +1"/>
<!-- this doesn't work. It prints out the same number of occurrences for all the rows because it only fetches 'a' and 'A', it never increases them -->
<xsl:with-param name="letter-one" select="$letter-one +1"/>
<xsl:with-param name="letter-two" select="$letter-two +1"/>
</xsl:call-template>
</xsl:if>
Итак, здесь я определяю шаблон get-textblock для рисования элемента TextBlock.
Затем я поставляю следующие параметры:
буква : счетчик, который просто идет на 26 строк вниз
letter-one : число, имеющее формат 'a' , прикрепленное к нему
две буквы : число, имеющее формат 'A' , прикрепленное к нему
То, что я хочу сделать, это продолжать увеличивать «a» и «A», чтобы соответствующее выражение XPath читалось как «b» & «B», «c» & «C» и т. Д., Вплоть до последняя буква алфавита. Я не знаю, как это сделать.
Есть идеи?
* Спасибо * 1035