2016-04-28 15 views
0

私はXSLT 1.0と一緒に作業しており、大きなアイテムのリストをステップアップし、これらのアイテムに関する情報にアクセスするためのリンクを生成します。XSLT - HREFを自動的に開きます

クリックしたときに新しいウィンドウを開き、正しいリンクに移動して正しい情報を表示するアイテムごとにHREFsを正常に作成できました。

これは正しい方向への大きな一歩ですが、私が把握できなかったことが1つあります。XSLTの処理時に自動的にリンクを開くにはどうすればよいですか? - 上記の例では、リンクが意図されていない

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

:ここ

<?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コードです:ここでは

XML文書は一例ですいかなる方法でも攻撃的ではなく、実際に何が起こっているかを実証できる短いリンクです。 (そして、はい、私はこの問題の解決策を模索しようとしました。)

これも私の予想通りです。結果のリンクのいずれかをクリックすると、私はどこにいるべきかがわかります。

私が今やりたいことは、ページが読み込まれると自動的にリンクが開きます。 (この場合は、リンクをクリックすることなく3つの新しいウィンドウが表示されるはずです。)可能であれば、これを実現する方法を教えてください。

ありがとう!

UPDATE 1 - これを解消することができるならば、また、各リンクのための印刷ダイアログを開くことが可能だろうか?もしそうなら、どうですか?

UPDATE 2 - 私はこの問題を解決するためにJavaを使用しようとしましたが、私は失敗しました。 (正直言っておかなければならないが、XSLTスタイルシート内でそれを使用するのはもちろんのこと、Javaにはあまり慣れていない。)以下は私が試みたことである。これは上記のコーディングの変更である。リンクのように下線付きのテキスト行が生成されましたが、クリックするとエラーが発生しました。 3

<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が - しかし私は、このリンクは静的であり、Javaが新しいウィンドウに新しいリンクを開くために取得することができました。それは各項目によって異なります。また、3つのプロセスがあっても、1つのウィンドウしか開きません。 - 私は進歩しています

<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を見なければならないときに、1つのウィンドウしか開かないことです。(開かれているウィンドウは最後/最後のリンクです。それで、スクリプトそのものが動作していると思って、今度は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を使用する経験はありません。どんな助けでも大歓迎です。私は元の投稿にしようとしたものを追加しました(Update 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> 

ありがとう!

関連する問題