2009-04-10 5 views
1

Мой вопрос: с помощью XSLT, как подсчитать общее число QUOTE теге (см пример кода ниже) В результате должны быть экспортированы в HTLM, оно будет отображаться как это: Есть всего 6 цитатКак подсчитать общее количество цитат в XSLT?

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="text.xsl" ?> 

    <quotes> 
     <quote>Quote 1 </quote> 
     <quote>Quote 2</quote> 
     <quote>Quote 3</quote> 
     <quote>Quote 4</quote> 
     <quote>Quote 5</quote> 
     <quote>Quote 6</quote> 
    </quotes> 

Я уже попробовать этот 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="/"> 
     <xsl:value-of select="count(//quote)"></xsl:value-of> 
    </xsl:template> 

</xsl:stylesheet> 

не могли бы вы помочь мне через эту проблему? Спасибо

+0

Подсказка: возможно, вы не знаете, что можете принять лучший ответ - щелкнув по значку OK/Accept, который отображается рядом с ответом :) –

ответ

0

кажется, что он отлично работает в Firefox 3 и IE6. больше информации о вашей настройке?

3

Ваше выражение XPath, хотя и не очень эффективно, дает правильный результат.

Когда преобразование выполняется с Saxon 9.1.0.5J, результат:

<?xml version="1.0" encoding="UTF-8"?>6 

Проблема, кажется, что это преобразование XSLT 2.0 (который он не должен быть !), и вы пытаетесь запустить его в браузере. К сожалению, сегодняшние браузеры не поддерживают (пока) XSLT 2.0.

Решение состоит в том, чтобы просто изменить версию на 1.0.

Для этого преобразования также не требуется пространство имён XML-схемы.

Наконец, если структура предоставленного XML-документа не изменится, более эффективное выражение XPath (поскольку использование аббревиатуры // приводит к тому, что полное (вспомогательное) дерево, начиная с верхнего элемента узла, которое будет сканироваться), будет быть следующее:

count(/*/quote) 

Собираем все это вместе, мы получаем следующее преобразование:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
<xsl:output method="html"/> 

    <xsl:template match="/"> 
     <xsl:value-of select="count(/*/quote)"/> 
    </xsl:template> 
</xsl:stylesheet> 

и производит желаемый результат.

+0

OK, он работает, спасибо большое –

Смежные вопросы