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>
No.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>
入力済みか未入力か見ておかないと変なことになるようですね。
そこの分岐を作っておけばうまくいきそうです、
どうもありがとうございました。
No.2
- 回答日時:
>属性のままで使うことはできないでしょうか。
状況がよく見えませんので、
とりあえず、使用しているXMLとXSLを補足していただけないでしょうか?
この回答への補足
失礼しました。
字数制限に引っかかったために
レンタル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>
ありがとうございます。
<?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>
No.1
- 回答日時:
リンクを作る部分だけ
<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を属性ではなく要素とすることで
正常に張れましたが、属性のままで使うことはできないでしょうか。
無理を言ってすみませんが、もしお手間でなければお教えください。
今回は回答して頂きありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(暮らし・生活・行事) Question site. 2 2022/11/21 19:17
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- 歴史学 最近の韓国のマスコミ報道で見かける「日帝強占期」って、「植民地時代」という表現とどう違うんでしょう? 5 2022/06/18 06:46
- Word(ワード) リンクが作動しない 7 2022/12/23 14:15
- 世界情勢 朝鮮日報 「中国の「他人のせい」DNA」……中国も韓国にだけは言われたくないでしょうね? 3 2022/09/12 07:22
- Ruby 教えてください 2 2023/01/04 17:50
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- 教えて!goo 「教えて!goo」運営に要望を連絡したいです。 1 2023/02/23 06:46
- 教えて!goo Bing共有リンクへの回答をしたところブロックされました。 2 2023/08/27 17:45
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XSLTで直下のテキストのみ取得...
-
XSLTがブラウザで表示されません。
-
XSL内でJavaScriptを記述し、Ja...
-
XMLから指定テキストのみを抜き...
-
xsl:param要素をxsl:templateの...
-
CPUの考え方を教えてください ...
-
UTF-8でエンコーディングとはど...
-
東芝のDynabookなのですがアン...
-
Access VBAでXMLが読み込めない
-
SNMP リンクダウンとノードダ...
-
メモリのセクションに関して
-
xmlファイルが上手にHTMLに変換...
-
このエラー、何とかなりません...
-
replaceChildメソッドについて
-
特殊記号が勝手にエスケープさ...
-
VBSでxmlの値を書き換えたい
-
XSLT
-
文字列や画像のurlをhtmlに代入...
-
4バイトを10進数に変換する方法
-
昔Winnyってありましたけど、あ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
スタイルシートを使用したXM...
-
XMLのHTMLへの変換 (初心者)
-
ノードの並び替え
-
XSL内でJavaScriptを記述し、Ja...
-
xmlのテキストにリンクを張りた...
-
xml→htmlへの変換&ページ分割...
-
空かスペースを認識させること...
-
XSLTにてタグ名を取得する方法
-
XMLとXSLTでリンクを張る方法
-
XSL中の改行、タブを無効にした...
-
重複するものを消したい
-
xslでの最小値、最大値の取得
-
スタイルシートについて
-
■XSLT■固定文字を使ったループ...
-
javaのTransformerでエラー
-
for-eachが上手くいきません
-
XMLデータを動的に使用する
-
XSLTで固定長データファイルを...
おすすめ情報