XSLT - 自动打开 HREF
XSLT - Open HREF Automatically
我正在使用 XSLT 1.0 单步执行大量项目并生成用于访问有关这些项目的信息的 links。
我已经能够为每个项目成功创建 HREFs
,单击这些项目会打开一个新的 window 并将我带到正确的 link 并显示正确的信息。
虽然这是朝着正确方向迈出的一大步,但有一件事我一直无法弄清楚:如何在处理 XSLT 时自动打开 links?
这里是一个例子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>
注意 - 上面示例中的 link 无意冒犯任何人,它只是一个简短的 link 这让我可以展示实际发生的事情。 (是的,我已经尝试为这个问题寻找解决方案。)
同样,这正如我所期望的那样工作。当我单击任何结果 link 时,我会被带到我应该去的地方。
我现在只想在页面加载后自动打开每个 link。 (在这种情况下,我应该看到 3 个新 windows 出现,而无需单击任何 link。)如果可能,请告诉我如何完成此操作。
谢谢!
更新 1 - 如果可以解决这个问题,是否也可以为每个 [=75= 打开一个打印对话框]?如果是,怎么做?
更新 2 - 我确实尝试使用 Java 来解决这个问题,但我没有成功。 (尽管老实说,我对 Java 不是很熟悉,更不用说在 XSLT 样式表中使用它了。)下面是我尝试的,它是对上面编码的修改。它生成了一行带有下划线的文本,如 link,但是当我点击它时,我收到了一个错误。
<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 打开一个新的 link新的 window,但是这个 link 是静态的。它不会因每个项目而异。此外,它只打开一个 window,即使有三个进程。这是我的代码:
<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 - 我正在进步!使用以下代码,我可以打开一个新的 window。我现在唯一的问题是只有一个 window 打开,而我应该看到 3 个。(打开的 window 用于 last/final link。在这个案例,"Example 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>
由于方向正确,我得以解决它。
解决方法是在xsl:for-each
进程中创建一个新的唯一script
和function
,然后在进入下一个循环之前调用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>
再次感谢大家的帮助!
我正在使用 XSLT 1.0 单步执行大量项目并生成用于访问有关这些项目的信息的 links。
我已经能够为每个项目成功创建 HREFs
,单击这些项目会打开一个新的 window 并将我带到正确的 link 并显示正确的信息。
虽然这是朝着正确方向迈出的一大步,但有一件事我一直无法弄清楚:如何在处理 XSLT 时自动打开 links?
这里是一个例子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>
注意 - 上面示例中的 link 无意冒犯任何人,它只是一个简短的 link 这让我可以展示实际发生的事情。 (是的,我已经尝试为这个问题寻找解决方案。)
同样,这正如我所期望的那样工作。当我单击任何结果 link 时,我会被带到我应该去的地方。
我现在只想在页面加载后自动打开每个 link。 (在这种情况下,我应该看到 3 个新 windows 出现,而无需单击任何 link。)如果可能,请告诉我如何完成此操作。
谢谢!
更新 1 - 如果可以解决这个问题,是否也可以为每个 [=75= 打开一个打印对话框]?如果是,怎么做?
更新 2 - 我确实尝试使用 Java 来解决这个问题,但我没有成功。 (尽管老实说,我对 Java 不是很熟悉,更不用说在 XSLT 样式表中使用它了。)下面是我尝试的,它是对上面编码的修改。它生成了一行带有下划线的文本,如 link,但是当我点击它时,我收到了一个错误。
<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 打开一个新的 link新的 window,但是这个 link 是静态的。它不会因每个项目而异。此外,它只打开一个 window,即使有三个进程。这是我的代码:
<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 - 我正在进步!使用以下代码,我可以打开一个新的 window。我现在唯一的问题是只有一个 window 打开,而我应该看到 3 个。(打开的 window 用于 last/final link。在这个案例,"Example 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>
由于方向正确,我得以解决它。
解决方法是在xsl:for-each
进程中创建一个新的唯一script
和function
,然后在进入下一个循环之前调用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>
再次感谢大家的帮助!