Как посчитать общее количество цитат в XSLT? - PullRequest
1 голос
/ 10 апреля 2009

Мой вопрос: используя XSLT, как подсчитать общее количество тегов QUOTE (см. Пример кода ниже) Результат нужно экспортировать в HTLM, он будет отображаться так: всего 6 кавычек

<?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>

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

Ответы [ 2 ]

3 голосов
/ 10 апреля 2009

Ваше выражение 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 голосов
/ 10 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...