2014-10-18 107 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。我還沒有想出如何使命令行中的線程包可用。