- ベストアンサー
XMLとXSLTでリンクを張る方法
XMLとXSLTでリンクを張る方法について質問させてください。 例えば下記のようなデータがあったとして、 <site>のGOOというテキストにhttp://www.goo.ne.jp/を新ウィンドウで開くリンクを張りたいのです。 よろしくお願いします。 <root> <data> <no>1</no> <site>surl="http://www.goo.ne.jp/">GOO</site> <setumei>教えて!gooなど</setumei> </data> </root>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じですかね。 ---------------------------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>test</title> </head> <body> <p align="left">test </p> <table border="1" width="500" align="left"> <tr> <th width="18%" align="left">title</th> <th width="60%" align="left">name</th> <th width="40%" align="left">mail</th> </tr> <xsl:apply-templates select="root" /> </table> </body> </html> </xsl:template> <xsl:template match="root"> <xsl:for-each select="data"> <xsl:sort select="kana" lang="ja" /> <tr> <td><xsl:value-of select="name" /> </td> <td> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="sname/@surl" /> </xsl:attribute> <xsl:attribute name="target"> _blank </xsl:attribute> <xsl:value-of select="sname"/> </xsl:element> </td> <td> <xsl:value-of select="mail"/> </td> </tr> </xsl:for-each> </xsl:template> </xsl:stylesheet>
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>属性のままで使うことはできないでしょうか。 状況がよく見えませんので、 とりあえず、使用しているXMLとXSLを補足していただけないでしょうか?
お礼
ありがとうございます。 <?xml version="1.0" encoding="Shift_JIS" standalone="yes"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <root> <data> <ID>1</ID> <name>あー</name> <kana>あ</kana> <sname surl="http://www.goo.ne.jp/">GOO</sname> <bdate>1982/08/11</bdate> <mail>test1@test.com</mail> </data> <data> <ID>2</ID> <name>いー</name> <kana>い</kana> <sname surl="http://blog.goo.ne.jp/">GOO BLOG</sname> <bdate>1983/03/11</bdate> <mail>test2@test.com</mail> </data> <data> <ID>2</ID> <name>うー</name> <kana>う</kana> <sname surl="">GOO辞書</sname> <bdate>1982/07/03</bdate> <mail>test3@test.com</mail> </data> </root>
補足
失礼しました。 字数制限に引っかかったために レンタルWEBスペースにXSLを上げたら 規約違反とこのことで削られてしまいました。 補足からならば字数制限はないようですね。 改めて投稿します。 度々すみませんがよろしくおねがいします。 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>test</title> </head> <body> <p align="left">test </p> <table border="1" width="500" align="left"> <tr> <th width="18%" align="left">title</th> <th width="60%" align="left">name</th> <th width="40%" align="left">mail</th> </tr> <xsl:apply-templates select="root" /> </table> </body> </html> </xsl:template> <!--==================================== ` ======================================--> <xsl:template match="root"> <xsl:for-each select="data"> <xsl:sort select = "kana" /> <xsl:if test="starts-with(kana,'あ')"> <tr> <td><xsl:value-of select="name" /> </td> <td> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="//@surl"/> </xsl:attribute> <xsl:attribute name="target"> _blank </xsl:attribute> <xsl:value-of select="sname"/> </xsl:element> </td> <td> <xsl:value-of select="mail"/> </td> </tr> </xsl:if> <xsl:if test="starts-with(kana,'い')"> <tr> <td><xsl:value-of select="name" /> </td> <td> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="//@surl"/> </xsl:attribute> <xsl:attribute name="target"> _blank </xsl:attribute> <xsl:value-of select="sname"/> </xsl:element> </td> <td> <xsl:value-of select="mail"/> </td> </tr> </xsl:if> <xsl:if test="starts-with(kana,'う')"> <tr> <td><xsl:value-of select="name" /> </td> <td> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="//@surl"/> </xsl:attribute> <xsl:attribute name="target"> _blank </xsl:attribute> <xsl:value-of select="sname"/> </xsl:element> </td> <td> <xsl:value-of select="mail"/> </td> </tr> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
リンクを作る部分だけ <site>surl="http://www.goo.ne.jp/">GOO</site> は <site surl="http://www.goo.ne.jp/">GOO</site> だとして ---------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//site"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="@surl"/> </xsl:attribute> <xsl:attribute name="target"> _blank </xsl:attribute> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> </xsl:template> </xsl:stylesheet>
お礼
ありがとうございます。 回答して頂いた内容で、無事リンクを張ることができました。 ただ申し訳ないのですが、初めに名前でのソートとstarts-withを使っているために、 <xsl:for-each select="//site"> が入れられずに、 <xsl:value-of select="@surl"/> の部分を <xsl:value-of select="//@surl"/ などとして見ましたが、 これだと一番最初のサイトのURLが 全てのサイトのリンクになってしまいます。 やむを得ず、surlを属性ではなく要素とすることで 正常に張れましたが、属性のままで使うことはできないでしょうか。 無理を言ってすみませんが、もしお手間でなければお教えください。 今回は回答して頂きありがとうございます。
お礼
入力済みか未入力か見ておかないと変なことになるようですね。 そこの分岐を作っておけばうまくいきそうです、 どうもありがとうございました。