こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

xmlから吐き出したhtmlデータのソースインデントがきかない

xmlとxsltを使って、htmlを吐き出しているのですが、
<xsl:output indent="yes"/>
indent="yes"を入れてもindentされません。

xsltは下記になります。
<?xml version="1.0" encoding="shift_jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="id" />
<xsl:output
method="xml"
standalone="yes"
encoding="Shift_JIS"
omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
indent="yes"
/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>KDS</title>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<link rel="stylesheet" href="/css/style.css" type="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript" src="/js/snavi_case.js"><xsl:comment>//</xsl:comment></script>
</head>
<body>
<xsl:apply-templates select="info/group/page[@fileId='pteach' and @fileId = $id]" mode="main"/>
</body>
</html>
</xsl:template>
<xsl:template match="info/group/page" mode="main">
<xsl:value-of select="title"/>
<table width="539" border="1">
<xsl:apply-templates select="teacher[position() mod 3 = 1]"/>
</table>
</xsl:template>
<xsl:template match="teacher">
<tr>
<td><xsl:value-of select="name"/>:<xsl:value-of select="subject"/></td>
<td><xsl:value-of select="following-sibling::teacher[1]/name"/>:<xsl:value-of select="following-sibling::teacher[1]/subject"/></td>
<td><xsl:value-of select="following-sibling::teacher[2]/name"/>:<xsl:value-of select="following-sibling::teacher[2]/subject"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>

ただ、<html>~<body>と</body>~</html>はしっかりとソースがインデントされるのですが、<xsl:apply-templates select="info/group/page[@fileId='pteach' and @fileId = $id]" mode="main"/>で読み込んだところ以降のindentが全くきいていないようです。
こんな感じになります。
<html>
<title></title>
<body>#ここまではindentは正常
<table><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></table>
#indentが効いていない!
</body>
</html>

どなたか同じような状況になられた方、
いらっしゃいませんでしょうか。

投稿日時 - 2007-04-20 13:01:25

QNo.2935658

すぐに回答ほしいです

質問者が選んだベストアンサー

#2については自己解決しました。後は質問者様の補足待ちです$Idの件も聞きたいし

[XML]
<title>
</title>
<!-- ここに文字列を入れました-->
[XSLT]
<xsl:template match="info/group/page" mode="main">
<xsl:value-of select="title"/> <!-- これのせいだったようです。ここをコメントアウトしたら解決しました。また、p要素等として括ってあげてもうまくいくことを確認しました -->

#2のソース、Gooの仕様上,数値文字参照に変換されちゃってますが,
XSLTをどうなおせばいいかは質問者様なら想像つきますよね

投稿日時 - 2007-04-20 14:09:01

お礼

ご回答ありがとうございます!!
超凡ミスでした。
お手数掛けました。
<xsl:param name="id" />なんですが、
前回使用したxsltファイルの削除ミスです。
申し訳ありませんでした。

投稿日時 - 2007-04-20 16:04:48

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

→<body> <table width="539" border="1" xmlns="">
ここが変だな。見直してみる。後、
<html xmlns="​http://www.w3.org/1999/xhtml">​
ではなく
<xsl:stylesheet version="1.0" xmlns:xsl="​http://www.w3.org/1999/XSL/Transform" xmlns="​http://www.w3.org/1999/xhtml">​
<xsl:param name="id" />

とするつもりだったんじゃないかな?関係ないけど。(table要素に名前空間宣言が追加されている)

投稿日時 - 2007-04-20 13:54:40

お礼

これもご回答ありがとうございました!!
この件もどうしたものかとずっと悩んでいたものです。
どもです!!!

投稿日時 - 2007-04-20 16:07:53

<?xml version="1.0" encoding="UTF-8"?>
<info>
<group>
<page fileId="pteach">
<!--
XSLTのソースを書いてくるなら一緒にXMLのサンプルソースくらい作ってくれたっていいだろ~
ってちょっとなきたくなったよ
俺の経験不足だと思うが
トップレベルにxsl:paramを置くとどんなメリットがあるのか聞きたい(xsl:variableではないんだよね?)

変換ができなかったのでand @fileId = $idを削らせていただいた。
-->

<title>
</title>
<!--
名前はすべて仮名。命名センスが悪いとか言わないこと。

-->
<teacher>
<name>山田信夫</name>
<subject>英語</subject>
</teacher>
<teacher>
<name>木田淳</name>
<subject>数学</subject>
</teacher>
<teacher>
<name>島義博</name>
<subject>英語</subject>
</teacher>
<teacher>
<name>山口正</name>
<subject>倫理</subject>
</teacher>
<teacher>
<name>広山進</name>
<subject>情報</subject>
</teacher>
<teacher>
<name>桃山博美</name>
<subject>現代文</subject>
</teacher>
<teacher>
<name>春日芳樹</name>
<subject>音楽</subject>
</teacher>
</page>
</group>
</info>

========eXtyle(MSXML)を用いた変換結果(きちんとインデントされている)====

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>KDS</title>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<link rel="stylesheet" href="/css/style.css" type="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript" src="/js/snavi_case.js"><!--//--></script>
</head>
<body> <table width="539" border="1" xmlns="">
<tr>
<td>山田信夫:英語</td>
<td>木田淳:数学</td>
<td>島義博:英語</td>
</tr>
<tr>
<td>山口正:倫理</td>
<td>広山進:情報</td>
<td>桃山博美:現代文</td>
</tr>
<tr>
<td>春日芳樹:音楽</td>
<td>:</td>
<td>:</td>
</tr>
</table>
</body>
</html>

投稿日時 - 2007-04-20 13:48:52

あなたにオススメの質問