【发布时间】:2014-12-13 15:23:23
【问题描述】:
我认为在 XSL 中没有直接的方法可以做到这一点,但想在编写服务器端代码之前与大家核实一下。
我正在开发一个网站,以使用 twitter API 显示来自数百个不同帐户的推文。 有一个包含 200 多个 twitter ID 和计数 (1-12) 的大型 XML 文件。我有一个使用 twitter API 执行 OAuth 并输出 JSON 的 PHP 脚本。这个 PHP 文件将 id 和 count 作为查询字符串。 现在 twitter 确实对每 15 分钟可以发送的请求数有限制。由于网页是通过 Saxon 使用 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,'&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,'&count=',@count))"/>
</xsl:for-each>
</xsl:template>
再次,我知道这很容易通过使用服务器端脚本来完成,我很好奇是否有办法在 XSL 转换期间添加 sleep()。任何想法/建议都将受到高度赞赏。
【问题讨论】:
-
您将 XSLT 与过程编程语言混为一谈。 XSLT 中的
for-each不是“循环”,在整个 XSLT 完成之前,XSLT 的输出是没有用的。所以即使你可以做你想做的事,也不可取。 -
为什么在转换过程中休眠,而不是简单地之前,即转换之间?
标签: php xml xslt twitter saxon