2012-04-01 7 views
0

xmlのハウスネームのリストビュー用にxsltファイルを設計しました。そして、リストから家の名前をクリックすると、同じXMLファイルにある家の詳細が表示されます。しかし、私の場合は別の場所にリダイレクトしています。誰か助けてくれますか?xsltファイルを使用してhrefリンクをxmlに展開することができません

<Houses> 
    <search> 
     <id>1</id> 
     <name>horror</name> 
     <address>09, west Road</address> 
     <city>London</city> 
     <pcode>se4 7jk</pcode> 
     <contact>020574110832</contact> 
     </search> 
</Houses> 

とXSLTファイルの問題の一部

<xsl:template match="name"> 
    <xsl:attribute name="href"> 
    <xsl:value-of select="//search/name"/> 
    </xsl:attribute> 
</xsl:template> 
+2

投稿されたサンプルXML入力用に作成するHTMLまたはXMLまたはプレーンテキスト出力を投稿して要件を説明することを検討し、それを達成するためのXSLT方法をお手伝いしてください。あなたの返信は –

答えて

0

私はあなたがそれぞれの名前にリンクを追加したいと仮定します。その場合、あなたは<a href="#horror">horror</a>

EDIT

はOKここ崩壊は/ボタンをクリックして拡大することをdiv要素を持つテーブルの例を示しますように。これは、要素を作成します

<xsl:template match="name"> 
    <a> 
     <xsl:attribute name="href"> 
      <xsl:text>#</xsl:text><xsl:value-of select="."/> 
     </xsl:attribute> 
     <xsl:value-of select="."/> 
    </a> 
</xsl:template> 

のようなものが必要になります。私はあなたのためにするために残した素晴らしいレイアウト。それはちょうどjavascriptトグルhide/showを含むxsltを使用してhtmlを作成する方法の例として意味しています。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>trial</title> 
       <script type="text/javascript" language="javascript"> 
        //expand and collapse functions based on id 
        function toggleById(IdStart) { 
        var divs = document.getElementsByTagName('div'); 
        for (var i=0<xsl:text>;</xsl:text> i&lt;divs.length<xsl:text>;</xsl:text> i++) { 
        if (divs[i].id.match("^"+IdStart) == IdStart) { 
         if(divs[i].style.display == "none") 
          { 
          divs[i].style.display = "block" 
          } 
         else { 
          divs[i].style.display = "none" 
          } 
        } 
        } 
        return true; 
        } 

       </script> 
      </head> 
      <body> 
       <table border="solid black 1pt;" style="border-collapse:collapse;padding:0;border-spacing:0"> 
        <tr> 
         <th>house name</th> 
         <th>details</th> 
        </tr> 
        <xsl:apply-templates/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="name"> 
     <tr> 
      <td> 
       <input> 
        <xsl:attribute name="type">button</xsl:attribute> 
        <xsl:attribute name="onclick">toggleById('<xsl:value-of select="."/>'); return true;</xsl:attribute> 
        <xsl:attribute name="onMouseOver">this.style.cursor='hand'</xsl:attribute> 
        <xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute> 
       </input> 
      </td> 
      <td> 
       <div> 
        <xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute> 
        <xsl:attribute name="style">display:none</xsl:attribute> 
        <xsl:copy-of select=".."/> 
       </div> 
      </td> 
     </tr> 
    </xsl:template> 

    <xsl:template match="text()"/> 

</xsl:stylesheet> 

<?xml version="1.0" encoding="UTF-8"?> 
<Houses> 
    <search> 
     <id>1</id> 
     <name>horror</name> 
     <address>09, west Road</address> 
     <city>London</city> 
     <pcode>se4 7jk</pcode> 
     <contact>020574110832</contact> 
    </search> 
    <search> 
     <id>2</id> 
     <name>nice</name> 
     <address>05, East Road</address> 
     <city>London</city> 
     <pcode>po4 3df</pcode> 
     <contact>none</contact> 
    </search> 
</Houses> 

に適用された場合これは

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>trial</title> 
     <script type="text/javascript" language="javascript"> 
        //expand and collapse functions based on id 
        function toggleById(IdStart) { 
        var divs = document.getElementsByTagName('div'); 
        for (var i=0; i<divs.length; i++) { 
        if (divs[i].id.match("^"+IdStart) == IdStart) { 
         if(divs[i].style.display == "none") 
          { 
          divs[i].style.display = "block" 
          } 
         else { 
          divs[i].style.display = "none" 
          } 
        } 
        } 
        return true; 
        } 

       </script> 
    </head> 
    <body> 
     <table border="solid black 1pt;" style="border-collapse:collapse;padding:0;border-spacing:0"> 
      <tr> 
       <th>house name</th> 
       <th>details</th> 
      </tr> 
      <tr> 
       <td><input type="button" onclick="toggleById('horror'); return true;" onMouseOver="this.style.cursor='hand'" value="horror"></td> 
       <td> 
        <div id="horror" style="display:none"> 
         <search> 
          <id>1</id> 
          <name>horror</name> 
          <address>09, west Road</address> 
          <city>London</city> 
          <pcode>se4 7jk</pcode> 
          <contact>020574110832</contact> 
         </search> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td><input type="button" onclick="toggleById('nice'); return true;" onMouseOver="this.style.cursor='hand'" value="nice"></td> 
       <td> 
        <div id="nice" style="display:none"> 
         <search> 
          <id>2</id> 
          <name>nice</name> 
          <address>05, East Road</address> 
          <city>London</city> 
          <pcode>po4 3df</pcode> 
          <contact>none</contact> 
         </search> 
        </div> 
       </td> 
      </tr> 
     </table> 
    </body> 
</html> 

を与えるには、ブラウザでそれを試してみてください、あなたは拡大/縮小動作が発生します。

+0

Thnxです。しかし、名前をクリックすると結果が拡大されます。別のファイルをリンクしない。 – Kabil

+0

Kabelash、クライアント側のSaxon XSLTエディションを使用しない限り、ブラウザのクリックなどのイベントに反応することはできません。それ以外の場合は、XSLTとJavascriptを組み合わせる必要があります。まず、使用するXSLTプロセッサ、使用する場所(クライアント側またはサーバー側)を知る必要があります。 –

+1

@Kabelash #horrorのようなアンカーをあなたのウェブページのある点にid = "horror"として追加すると、カーソルがその点にジャンプします。あなたが物を隠して見せたいなら、あなたはもっと多くをする必要があります。特にリンクをクリックすると表示/非表示を切り替える隠されたものにクラスを追加し、マーチンが指摘したようにいくつかのjavascriptを利用しました。それはあなたがしたいことですか? – Maestro13

関連する問題