XML

このエントリーをはてなブックマークに追加
136nobodyさん
XMLはじめて2日目の者なのですが、
ちょっと質問させてください。

たとえば、XMLの方で、

<root>
<文章>あいうえお、<強調>かきくけこ</強調>さしすせそ<強調>たちつてと</強調>なに・・・</文章>
</root>
だとして、


これを、XSLで、

<p>あいうえお、<b>かきくけこ</b>さしすせそ<b>たちつてと</b>なに・・・</p>

みたいにするには、どうすればよいのでしょうか?
なんかうまくいかないのです。
137nobodyさん:02/09/12 02:15 ID:wHFPtXre
答えてもいいけどやってみたことを書いてよ
138136:02/09/12 02:56 ID:???
>>137 さん、返答ありがとうございます。
まだ、XSLの方が、よくわかっていないのですが、次のように書いてみて、うまくいきませんでした。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html><head></head><body>
<xsl:apply-templates select="root/文章"/>
</body></html>
</xsl:template>
<xsl:template match="文章">
<xsl:apply-templates select="強調"/>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="強調">
<b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>

上のほうの投稿で、text() というのがあったので、「これがヒントになるかな?」
ともおもったのですが、うーん、ちょっとわからないというところです。

アプローチとして、
1) xsl:for-eachとxsl:if を組み合わせて、タグを見て判定しながら、
 順次連結してゆくような感じなのだろうか。。。
2)それとも、<強調> タグを<b>へと「ポン」と置き換えるようなアプローチ?
 (できるんでしょうか。。。)

というところで現在考えているところなんです。。。
139nobodyさん:02/09/12 03:41 ID:wHFPtXre
それだと「match="文章"」のテンプレまで来た後
1.まず<文章>の下位の<強調>要素のみにテンプレを適用させる
 a. <強調>かきくけこ</強調>に「match="強調"」テンプレが適用
 b. <強調>たちつてと</強調>に「match="強調"」テンプレが適用
2.そのあと「文章」のvalue(=「あいうえお、かきくけこさしすせそたちつてとなに・・・ 」)を出力

になっちゃうでしょ。(続く)
140nobodyさん:02/09/12 03:41 ID:wHFPtXre
素直に書けばこうなんだけど、

<?xml version="1.0" encoding="shift_jis" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>

<xsl:template match="/root">
<html><body>
<xsl:apply-templates />
</body></html>
</xsl:template>

<xsl:template match="文章">
<p>
<xsl:apply-templates />
</p>
</xsl:template>

<xsl:template match="強調">
<b>
<xsl:apply-templates />
</b>
</xsl:template>

</xsl:stylesheet>
141nobodyさん:02/09/12 03:42 ID:wHFPtXre
これだと「match="文章"」まできたところで
1.<xsl:apply-templates />なので<文章>のすべての子にテンプレを適用
 a.あいうえお、→テンプレがないのでそのまま出力
 b.<強調>かきくけこ</強調>→「match="強調"」テンプレが適用
 c.さしすせそ
 d.<強調>たちつてと</強調>
 e.なに・・・

ってなる。
142136:02/09/12 04:03 ID:???
>>139-141

おおなるほど、そういう風に書いていけばよいのですね。

WEBの内容をXML+XSLにするときに、これ系のものが一番頻繁に
発生しそうだったので、なんとか解決したいと思っていました。

ご親切にありがとうございました。