2016-04-28 27 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> 

再次感谢所有帮助!