dポイントプレゼントキャンペーン実施中!

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>

A 回答 (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>
    • good
    • 0
この回答へのお礼

入力済みか未入力か見ておかないと変なことになるようですね。
そこの分岐を作っておけばうまくいきそうです、
どうもありがとうございました。

お礼日時:2005/12/10 14:09

>属性のままで使うことはできないでしょうか。


状況がよく見えませんので、
とりあえず、使用している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>

補足日時:2005/12/08 17:30
    • good
    • 0
この回答へのお礼

ありがとうございます。


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

お礼日時:2005/12/07 19:28

リンクを作る部分だけ


<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>
    • good
    • 0
この回答へのお礼

ありがとうございます。
回答して頂いた内容で、無事リンクを張ることができました。
ただ申し訳ないのですが、初めに名前でのソートとstarts-withを使っているために、
<xsl:for-each select="//site">
が入れられずに、

<xsl:value-of select="@surl"/>
の部分を
<xsl:value-of select="//@surl"/
などとして見ましたが、
これだと一番最初のサイトのURLが
全てのサイトのリンクになってしまいます。
やむを得ず、surlを属性ではなく要素とすることで
正常に張れましたが、属性のままで使うことはできないでしょうか。
無理を言ってすみませんが、もしお手間でなければお教えください。
今回は回答して頂きありがとうございます。

お礼日時:2005/12/06 23:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!