- - PR -
XMLとXSLでの改行
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-08 13:24
初めまして。
@ITでの書き込み方でで駄目な部分も有りますが、 治していくので許してください。 今回は壁にぶつかったので質問します。 ■質問■ ASP.NETでXMLを呼び出そうとしています。 ツリー型掲示板(仮)を作っています。 しかし・・・記事の改行がうまくできません。 ↓XML↓ <?xml version='1.0'?> <?xml-stylesheet type="text/xsl" href="CommentTree.xslt"?> <IssueComment> <Comment> <EntryName>Aさん</EntryName> <EntryDate>2005/06/04</EntryDate> <Title>1・2・3・ヒャー!!</Title> <RenewName></RenewName> <RenewDate></RenewDate> </Comment> <Comment> <EntryName>Bさん</EntryName> <EntryDate>2005/06/07</EntryDate> <Title>└猪木のパくり?<BR />そうだよねぇ?</Title> <RenewName></RenewName> <RenewDate></RenewDate> </Comment> <Comment> <EntryName>Cさん</EntryName> <EntryDate>2005/06/03</EntryDate> <Title>1・2・3 ダー!!</Title> <RenewName></RenewName> <RenewDate></RenewDate> </Comment> <Comment> <EntryName>Cさん</EntryName> <EntryDate>2005/06/05</EntryDate> <Title>└猪木だよ(σ〃'ω')σYO</Title> <RenewName></RenewName> <RenewDate></RenewDate> </Comment> <Comment> <EntryName>Eさん</EntryName> <EntryDate>2005/06/04</EntryDate> <Title>└猪木かよ!</Title> <RenewName></RenewName> <RenewDate></RenewDate> </Comment> </IssueComment> ↓XSLT↓ <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="IssueComment"> <table width="100%"> <xsl:for-each select="Comment"> <tr> <td width="60%"><font style="font-size:x-small"> <xsl:value-of select="Title"/> </font> </td> <td width="10%"><font style="font-size:x-small"> <xsl:value-of select="EntryName"/> </font> </td> <td width="10%"><font style="font-size:x-small"> <xsl:value-of select="EntryDate"/> </font> </td> <td width="10%"><font style="font-size:x-small"> <xsl:value-of select="RenewUser"/> </font> </td> <td width="10%"><font style="font-size:x-small"> <xsl:value-of select="RenewDate"/> </font> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> たしか改行は<BR />で良かったと思うのですが・・・。 XML初心者なのでXMLのタグに悩まされています。 作業的には・・・ ASP.NETからSQLServerにアクセスし、 ASP.NETからXMLファイルを更新。 その後XMLを読み出しています。 一応なんちゃってツリーまでは出せているのですが、 改行されません。 どうすれば改行できるか分かる方おられないでしょうか。 XML初心者なのでできるだけ分かりやすくお願いします。 [ メッセージ編集済み 編集者: ひろ 編集日時 2005-03-09 10:01 ] |
|
投稿日時: 2005-03-08 23:54
原因はXSLTプロセッサが「<br/>」をHTMLの改行ではなく、
単に名前が「br」であるタグだと認識するためです。 この場合、 <Title>└猪木のパくり?<BR />そうだよねぇ?</Title> のTitle要素は、 @「└猪木のパくり?」という値を持つテキストノード、 A「BR」という名前の空要素(値を持たない要素) B「そうだよねぇ?」という値を持つテキストノード の3つの子ノードを持つことになります。 ですので、<xsl:value-of select="Title">の出力は @+A+B→└猪木のパくり?そうだよねぇ? となってしまいます。 そこで、解決方法として <Title>└猪木のパくり?<BR />そうだよねぇ?</Title> を <Title>└猪木のパくり?&lt;BR /&gt;そうだよねぇ?</Title> のように文字参照として記述し、XSLT内で <xsl:value-of select="Title" disable-output-escaping="yes"/> のように書くとうまく改行できます。 disable-output-escaping属性をyesにすると、 文字参照が表す文字がそのまま出力されます。(デフォルトはno) あと、SQL Serverに掲示板の投稿内容を保存してあるのであれば、 XMLに整形する必要はないような気が・・・ それと、XSLTもとても有用ですが、.NETでDOMっぽいこともできるので、 一度試してみてはいかがでしょうか? |
|
投稿日時: 2005-03-09 00:43
xsl:value-of 命令は、ノードの文字列値を出力するもので、要素ノードの文字列値はすべての 子孫テキストノードの文字列値をドキュメント順に連結したものです。
<xsl:copy-of select="Title/node()" /> を使えば、Titleの内容をそのままタグ付きで出力することができると思います。 |
|
投稿日時: 2005-03-09 11:14
Vacant-EyesさんAtsushi.Enoさんありがとうございました。
親切な書き込みで解決することができました。 >あと、SQL Serverに掲示板の投稿内容を保存してあるのであれば、 >XMLに整形する必要はないような気が・・・ >それと、XSLTもとても有用ですが、.NETでDOMっぽいこともできるので、 >一度試してみてはいかがでしょうか? と有りましたが、ASP.NET+SQLServer+SML+XSLTを触るのが初めてなので、 今しているプロジェクトが終わり次第勉強しようと思います。 本当にありがとうございました。 |
1