2016-04-28 50 views
0

我正在與XSLT 1.0一起瀏覽大量項目列表並生成用於訪問有關這些項目的信息的鏈接。XSLT - 自動打開HREF

我已經能夠成功地爲每個項目創建HREFs,點擊後,打開一個新窗口並帶我到正確的鏈接並顯示正確的信息。

雖然這是朝着正確方向邁出的一大步,但有一件事我一直無法弄清楚:如何處理XSLT時自動打開鏈接?

下面是一個例子XML文檔:

<?xml version="1.0" encoding="UTF-8"?> 

<document> 
    <example> 
     <number>1</number> 
    </example> 
    <example> 
     <number>2</number> 
    </example> 
    <example> 
     <number>3</number> 
    </example> 
</document> 

這裏是我當前XSL代碼:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:oldxsl="http://www.w3.org/TR/WD-xsl" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:local="#local-functions" 
    xmlns:date="http://exslt.org/dates-and-times">  

<xsl:template match="/"> 

    <html> 

     <xsl:for-each select="//example"> 

      <xsl:element name="a"> 
       <xsl:attribute name="href"> 
        <xsl:text>http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/> 
       </xsl:attribute> 
       <xsl:attribute name="target">_blank</xsl:attribute> 
        <xsl:value-of select="./number"/><br/> 
      </xsl:element> 

     </xsl:for-each> 

    </html> 

</xsl:template> 

</xsl:stylesheet> 

- 在例如上面的鏈接並不意味着以任何方式冒犯,這只是一個簡短的鏈接,可以讓我展示實際發生的事情。 (是的,我試圖尋找解決這個問題。)

再次,這是工作,因爲我期望它。當我點擊任何產生的鏈接時,我就會被帶到我應該在的地方。

我現在想要做的就是在頁面加載後自動打開每個鏈接。 (在這種情況下,我應該看到3個新窗口不必點擊任何鏈接。)如果可能,請告訴我如何完成此操作。

謝謝!

更新1 - 如果這是可以解決的,就也有可能打開每個鏈接的打印對話框?如果是這樣,怎麼樣?

UPDATE 2 - 我確實嘗試用Java來解決這個問題,但是我沒有成功。 (雖然我必須誠實地說,我對Java並不是很熟悉,更不用說在XSLT樣式表中使用它了。)下面是我嘗試的,這是對上述代碼的修改。它生成了一行像鏈接一樣下劃線的文本,但是當點擊時,我收到一個錯誤。

<xsl:element name="a"> 
    <xsl:attribute name="href"> 
     <xsl:text>#</xsl:text> 
    </xsl:attribute> 
    <xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text> 
    </xsl:attribute> 
    <xsl:attribute name="target">_blank</xsl:attribute> 
     <xsl:value-of select="./number"/><br/> 
</xsl:element> 

更新3 - 我能得到的Java在新窗口中打開一個新的鏈接,但這個鏈接是靜態的。它不隨每個項目而變化。此外,它只打開一個窗口,即使有三個進程。下面的代碼我有:

<script type="text/javascript"> 
    function load() 
    { 
    window.open("http://www.google.com"); 
    } 
</script> 

<body onload="load()"> 
    <xsl:element name="a"> 
     <xsl:attribute name="href"> 
      <xsl:text>#</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="target">_blank</xsl:attribute> 
      <xsl:value-of select="./number"/><br/> 
    </xsl:element> 
</body> 

UPDATE 4 - 我在進步!通過以下代碼,我可以打開一個新窗口。我現在唯一的問題是,只有一個窗口打開,我應該看到3.(打開的窗口是最後一個/最後一個鏈接,在這種情況下,「示例3」)。這使我相信腳本本身正在工作,並且我現在只需要在每次xsl:for-each循環時都找出如何調用腳本。)建議?

<xsl:for-each select="//example"> 

<script type="text/javascript"> 
    function load() 
    { 
    xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text> 
    } 
</script> 

<body onload="load()"> 
    <xsl:element name="a"> 
     <xsl:attribute name="href"> 
      <xsl:text>#</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="target">_blank</xsl:attribute> 
      <xsl:value-of select="./number"/><br/> 
    </xsl:element> 
</body> 
+0

打開鏈接應該基本上可以使用一點點JavaScript。但可能會被視爲彈出並被阻止。 –

+0

我這樣做的最好方法是什麼? (我用JS試過的東西並不成功,幾乎像JS一樣不被識別?) – Simcik

+0

@ hr_117我試圖使用Java,但沒有成功。我只是比較熟悉Javascript,並且我沒有在XSLT樣式表中使用Java的經驗。任何幫助將不勝感激。我添加了我想要的原始帖子(請參閱更新2)。 – Simcik

回答

1

由於向正確的方向微調,我能夠解決它。

解決的辦法是在xsl:for-each進程中創建一個新的唯一scriptfunction,然後在進入下一個循環之前調用function

這裏的工作代碼:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:oldxsl="http://www.w3.org/TR/WD-xsl" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:local="#local-functions" 
    xmlns:date="http://exslt.org/dates-and-times" 
    xmlns:lookup="lookup" exclude-result-prefixes="lookup"> 

<xsl:for-each select="//example"> 

<script type="text/javascript"> 
    function load() 
    { 
    xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text> 
    } 
</script> 

<xsl:element name="a"> 
    <xsl:attribute name="href"> 
     <xsl:text>#</xsl:text> 
    </xsl:attribute> 
    <xsl:attribute name="target">_blank</xsl:attribute> 
     <xsl:value-of select="./number"/><br/> 
</xsl:element> 

<script> 
    load.call() 
</script> 

</xsl:for-each> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

再次感謝所有幫助!