2014-10-18 70 views
0

我认为在XSL中没有直接的方法来完成这个任务,但是想在编写服务器端代码之前先与大家核对一下。XSL中的休眠功能

我正在网站上使用twitter API显示来自数百个不同帐户的推文。 有一个很大的XML文件,其中包含200多个推特ID和计数(1-12)。我有一个PHP脚本,可以使用twitter API执行OAuth并输出JSON。这个PHP文件将id和count作为查询字符串。 现在twitter对每15分钟可发送的请求数量有限制。由于通过使用撒克逊XSL转换生成的网页,我想做点什么喜欢 -

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

同样,我明白这是很容易通过只使用服务器端脚本来实现,由我好奇在XSL转换过程中是否有添加sleep()的方法。任何想法/建议将不胜感激。

+0

您正在将XSLT与过程式编程语言混淆起来。 XSLT中的for-each不是一个“循环”,直到整个XSLT完成后,XSLT的输出才会有用。所以即使你可以做你想做的事情,这也不是可取的。 – JLRishe 2014-10-18 04:39:41

+0

为什么在转化期间睡眠,而不仅仅是在它之前,即在转换之间? – 2014-10-18 07:51:42

回答

1

我能想到的两种方法可以做到这一点:一个是在服务器上定期执行的变换(即转换之间的睡眠),另一种是生成包含定期获取Twitter提要的Javascript(或Saxon-CE)代码的HTML代码。我们在XML布拉格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中,转换在内部Oxygen运行时找到了java.package。我还没有想出如何使命令行中的线程包可用。