2014-10-18 2 views
0

Я думаю, что нет прямого способа сделать это в XSL, но вы хотели бы проверить с вами все, прежде чем писать код на стороне сервера.Функция сна в XSL

Я работаю над веб-сайтом, чтобы отображать твиты из сотен различных учетных записей, используя API twitter. Существует большой файл XML, содержащий более 200 идентификаторов и счетчиков твиттера (1-12). У меня есть PHP-скрипт, который выполняет OAuth и выводит JSON с помощью API twitter. Этот PHP-файл принимает как id, так и count как строки запроса. Теперь twitter имеет ограничение на количество запросов, которые могут быть отправлены за 15 минут. Поскольку веб-страницы генерируется с помощью преобразования XSL через Saxon, я думал сделать что-то как-

<xsl:template name="all-social"> 

    <xsl:for-each select="/social/twitter"> 
     <xsl:value-of select="unparsed-text(concat('http://something/twitter.php? 
    id=',@id,'&amp;count=',@count))"/> 
     <!-- or apply-templates select="document(--URL--)" --> 
    </xsl:for-each> 

    </xsl:template> 

это возвращает JSON твитов, и я могу делать все, что на переднем конце, чтобы отобразить его должным образом. Но преодолеть ограничения API мне нужно добавить паузу или сон внутри цикла for-each как-

 <xsl:template name="all-social"> 

     <xsl:for-each select="/social/twitter"> 

      <!-- Wait for 5 seconds --> 

      <xsl:value-of select="unparsed-text(concat('http://something/twitter.php? 
     id=',@id,'&amp;count=',@count))"/> 
     </xsl:for-each> 

     </xsl:template> 

Опять же, я понимаю, что это очень легко сделать только с помощью сценариев на стороне сервера, на я Любопытно, есть ли способ добавить sleep() во время преобразования XSL. Любые идеи/рекомендации будут высоко оценены.

+0

Вы объединяете XSLT с процедурными языками программирования. 'For-each' в XSLT не является« циклом », а выход XSLT не нужен, пока не завершится весь XSLT. Поэтому, даже если бы вы могли делать то, что вы пытаетесь сделать, это было бы нецелесообразно. – JLRishe

+0

Почему сон во время трансформации, а не просто _before_ это, то есть между преобразованиями? –

ответ

1

я могу думать о двух способов сделать это: один, чтобы выполнить преобразование периодически на сервере (т.е. спать между преобразованиями), а другой - генерировать HTML-код, содержащий код Javascript (или Saxon-CE), который периодически извлекает фид Twitter. Мы продемонстрировали, как это сделать в документе в формате XML Prague 2013.

1

Насколько я знаю, XSLT не имеет встроенной функции сна, но вы можете использовать функцию расширения. Например. в случае обработки с помощью java, вы можете использовать Xalan-J для вызова Thread.sleep.

Для справки: найти на https://www.ibm.com/developerworks/community/forums, может быть, тем временем есть лучшие библиотеки расширения, как эта рекомендация от 2008

1

Поздний ответ. Это работает для меня с SaxonPE на рабочем столе. Я не знаю, переведет ли он вашу среду. 4 вторая пауза:

<xsl:template name="sleep" xmlns:thread="java.lang.Thread"> 
    <xsl:value-of select="thread:sleep(4000)"/>   
</xsl:template> 

Усилительные Информация: Он работал очень хорошо для меня, когда работает внутри OxygenXML с SaxonPE выбранным. Тем не менее, у меня есть не получил его на работу при запуске преобразований из командной строки.

Я думаю, что в Oxygen преобразование обнаружило java.package во внутренней среде Oxygen. Я не понял, как сделать пакет потоков доступным в командной строке.