XSLT - 自动打开HREF

时间:2016-04-28 16:44:24

标签: javascript xslt xslt-1.0 href

我正在使用 XSLT 1.0 来逐步查看大量项目,并生成用于访问有关这些项目的信息的链接。

我已经能够为每个项目成功创建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 - 如果可以解决此问题,是否也可以为每个链接打开打印对话框?如果是这样,怎么样?

更新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>

更新4 - 我正在取得进步!使用以下代码,我可以打开一个新窗口。我现在唯一的问题是只有一个窗口打开,我应该看到3.(打开的窗口是最后/最后一个链接。在这种情况下,&#34;示例3&#34;。那导致我相信脚本本身正在工作,我现在只需要弄清楚每次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>

1 个答案:

答案 0 :(得分:1)

由于向正确的方向轻推,我能够解决它。

解决方案是在script进程中创建一个新的唯一functionxsl:for-each,然后在转到下一个循环之前调用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>

再次感谢您的帮助!