2016-04-28 12 views
0

Ich arbeite mit XSLT 1.0, um durch eine große Liste von Elementen zu gehen und Verknüpfungen zu generieren, die verwendet werden, um auf Informationen zu diesen Elementen zuzugreifen.XSLT - HREF automatisch öffnen

Ich konnte erfolgreich HREFs für jedes Element erstellen, das beim Klicken auf ein neues Fenster öffnet und mich zum richtigen Link führt und die richtigen Informationen anzeigt.

Während dies ein großer Schritt in die richtige Richtung ist, konnte ich eines noch nicht herausfinden: Wie kann ich die Links automatisch öffnen, wenn XSLT verarbeitet wird? Hier

ist ein Beispiel XML Dokument:

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

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

Hier ist mein aktueller XSL Code:

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

HINWEIS - Der Link in dem obigen Beispiel nicht gemeint ist, in irgendeiner Weise beleidigend zu sein, ist es nur ein kurzer Link, der es mir erlaubt zu demonstrieren, was tatsächlich stattfindet. (Und ja, ich habe versucht, nach einer Lösung für dieses Problem zu suchen.)

Auch dies funktioniert so, wie ich es erwarten würde. Wenn ich auf einen der resultierenden Links klicke, werde ich dorthin gebracht, wo ich sein sollte.

Alles, was ich jetzt tun möchte, ist jeden Link automatisch zu öffnen, sobald die Seite geladen wurde. (In diesem Fall sollte ich 3 neue Fenster sehen, ohne auf einen der Links klicken zu müssen.) Wenn dies möglich ist, lassen Sie mich bitte wissen, wie dies zu erreichen ist.

Danke!

UPDATE 1 - Wenn diese gelöst werden können, wäre es auch möglich sein, für jede Verbindung einen Druck-Dialog zu öffnen? Wenn das so ist, wie?

UPDATE 2 - ich habe versucht Java zu verwenden, um dies zu lösen, aber ich war nicht erfolgreich. (Obwohl ich ehrlich sein muss, bin ich mit Java nicht sehr vertraut, ganz zu schweigen davon, dass ich es in einem XSLT-Stylesheet verwende.) Unten habe ich versucht, was eine Modifikation der obigen Kodierung ist. Es erzeugte eine Textzeile, die wie eine Verknüpfung unterstrichen wurde, aber als ich darauf klickte, erhielt ich einen Fehler.

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

UPDATE 3 - ich war in der Lage Java zu bekommen einen neuen einen Link in einem neuen Fenster zu öffnen, aber diese Verbindung ist statisch. Es variiert nicht mit jedem Artikel. Außerdem wird nur ein Fenster geöffnet, obwohl drei Prozesse vorhanden sind. Hier ist der Code, den ich habe:

<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 - ich Fortschritte mache! Mit dem folgenden Code kann ich ein neues Fenster öffnen. Das einzige Problem, das ich jetzt habe, ist, dass nur ein Fenster geöffnet wird, wenn ich 3. sehen sollte. (Das Fenster, das sich öffnet, ist für den letzten/letzten Link. In diesem Fall "Beispiel 3".Das führt mich dazu zu glauben, dass das Skript selbst funktioniert und dass ich jetzt nur herausfinden muss, wie ich das Skript jedes Mal aufrufen soll, wenn die xsl:for-each Schleife zurückkehrt.) Vorschläge?

<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

Öffnen Sie die Links sollte grundsätzlich mit ein wenig JavaScript möglich sein. Aber kann als Popup und blockiert betrachtet werden. –

+0

Was ist der beste Weg für mich, dies zu tun? (Was ich mit JS wenig versucht habe war nicht erfolgreich. Fast wie JS wird nicht erkannt?) – Simcik

+0

@ hr_117 Ich habe versucht, Java zu verwenden, war aber nicht erfolgreich. Ich bin nur ein wenig vertraut mit Javascript und ich habe keine Erfahrung mit der Verwendung von Java in einem XSLT Stylesheet. Jede Hilfe würde sehr geschätzt werden. Ich habe das, was ich versucht habe, zum ursprünglichen Beitrag hinzugefügt (siehe Update 2). – Simcik

Antwort

1

Ich konnte es durch den Anstupser in die richtige Richtung gelöst werden.

Die Lösung ist eine neue einzigartige script und function im xsl:for-each Prozess zu erstellen und dann die function aufrufen, bevor auf die nächste Schleife gehen.

Hier ist der Arbeitscode:

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

Nochmals vielen Dank für die Hilfe!

Verwandte Themen