【问题标题】:Sleep function in XSLXSL 中的睡眠函数
【发布时间】: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,'&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()。任何想法/建议都将受到高度赞赏。

【问题讨论】:

  • 您将 XSLT 与过程编程语言混为一谈。 XSLT 中的for-each 不是“循环”,在整个 XSLT 完成之前,XSLT 的输出是没有用的。所以即使你可以做你想做的事,也不可取。
  • 为什么在转换过程中休眠,而不是简单地之前,即转换之间?

标签: php xml xslt twitter saxon


【解决方案1】:

据我所知,XSLT 没有本机睡眠功能,但您可以使用扩展功能。例如。如果您使用 java 进行处理,您可以使用Xalan-J 调用 Thread.sleep。

供参考:在https://www.ibm.com/developerworks/community/forums上找到,也许同时有更好的扩展库,因为这个推荐是从2008年开始的。

【讨论】:

    【解决方案2】:

    我可以想到两种方法:一种是在服务器上定期执行转换(即在转换之间休眠),另一种是生成包含 Javascript(或 Saxon-CE)代码的 HTML 代码,该代码定期获取推特供稿。我们在 XML 布拉格 2013 的一篇论文中演示了如何实现后者。

    【讨论】:

      【解决方案3】:

      迟到的回复。这适用于桌面上的 SaxonPE。我不知道它是否会转化为您的环境。 4 秒停顿:

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

      放大信息:在选择 SaxonPE 的 OxygenXML 中运行时,它对我来说非常有效。但是,在从命令行运行转换时,我 没有 让它工作。

      我认为在 Oxygen 中,转换在内部 Oxygen 运行时中找到了 java.package。还没想好怎么让线程包在命令行下可用。

      【讨论】:

        猜你喜欢
        • 2010-12-12
        • 2021-05-11
        • 1970-01-01
        • 2017-01-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 2012-04-07
        相关资源
        最近更新 更多