C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: XMLの改行について、HTMLで表に表示される改行


(過去ログ 33 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■16171 / inTopicNo.1)  XMLの改行について、HTMLで表に表示される改行
  
□投稿者/ ゆっちん (1回)-(2008/03/29(Sat) 16:48:34)

分類:[.NET 全般] 

買った本のサンプルを使って先生の紹介を作ったのですが。
HTMLページでは先生を選択するとテーブルができて表示されるのですが
挨拶のところが<br>を使っても改行できず困っています。
初心者なもので、だれか改行できるようにするにはどうすればよいか
教えていただけないでしょうか。

ちなみに挨拶のところは表はこんな感じで表示されます

_________________
クラス |  3                    |
____|____________|  
    |ああああああああいいい |
挨 拶 |いいいいいいいいううう |   
    |うううううう      |
____|____________|                       
資 格 |                        |
____|____________|             
    |                        |
専門分野|                        |
____|________________________|  

<挨拶>ああああああ</挨拶>
<挨拶>いいいいいい</挨拶>
<挨拶>うううううう</挨拶>
のようにひとつひとつ区切ると見栄えは
いいのですが、テーブルが下記のように
なりできればきちんと改行したい。
_________________
クラス |  3                    |
____|____________|  
挨 拶 |ああああああああ        |
____| _______________________|
挨 拶 |いいいいいいいい    |   
__________________________________|
挨 拶 |うううううううう    |   
__________________________________|
        |                        |
資 格 |                        |
____|____________|             
    |                        |
専門分野|                        |
____|________________________|  

このように改行したいのです。
_________________
クラス |  3                    |
____|____________|  
    |ああああああああ    |
挨 拶 |いいいいいいいい    |   
    |うううううううう    |     
____|____________|                       
資 格 |                        |
____|____________|             
    |                        |
専門分野|                        |
____|________________________|  


ファイルの内容は下記を使ってます。


@XMLファイル school.xml


<?xml version="1.0" encoding="Shift_JIS"?>
<学校案内>


<先生 位置x="385" 位置y="55" 写真="../imge/dr/01.gif">
		<クラス>3</クラス>
		<クラブ>ブラバンド</クラブ>
		<氏名>山中 正子先生</氏名>
		<フリガナ>やまなか まさこ</フリガナ>
		<先生紹介>
			<担当教科>音楽</担当教科>
			 <挨拶>ああああああああ
				いいいいいいいい
				うううううううう
			</挨拶>
			<資格>英検3級
			   音楽教師
			</資格>
			<専門分野>音楽</専門分野>
		</先生紹介>
</先生>

<学校案内>


<先生 位置x="385" 位置y="55" 写真="../imge/dr/01.gif">
		<クラス>4</クラス>
		<クラブ>野球</クラブ>
		<氏名>真田 幸弘先生</氏名>
		<フリガナ>さなだゆきひろ</フリガナ>
		<先生紹介>
			<担当教科>国語</担当教科>
			 <挨拶>ああああああああああああああああ
				いいいいいいいいいいいいいいいい
				うううううううううううううううう
				ええええええええええええええええ 
			</挨拶>
			<資格>教師
			</資格>
			<専門分野>国語</専門分野>
		</先生紹介>
</先生>


</学校案内>



AXSLファイル school.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" version="4.01" indent="yes" />
<xsl:param name="userName"></xsl:param>
<xsl:template match="/">
<div style="font-family:MS Pゴシック;font-size:12pt;color:navy;background-color:gold;padding:2px;"><xsl:value-of select="学校案内/クラブ" /></div>
<div style="margin-top:15px;"><xsl:apply-templates select="学校案内" /></div>
</xsl:template>

<xsl:template match="学校案内">
		<xsl:for-each select="先生">
				<xsl:variable name="namae" select="氏名" />
				<xsl:if test="$userName=$namae">
						<table border="0">
										<caption2><xsl:value-of select="クラス" /><xsl:text>(</xsl:text><xsl:value-of select="クラブ" /><xsl:text>)</xsl:text></caption2>

							<caption><xsl:value-of select="氏名" /><xsl:text>(</xsl:text><xsl:value-of select="フリガナ" /><xsl:text>)</xsl:text></caption>
								<xsl:for-each select="先生紹介">
									<xsl:apply-templates />
								</xsl:for-each>
								
						</table>
				</xsl:if>
		</xsl:for-each>
</xsl:template>

<xsl:template match="*">
	<tr><th><xsl:value-of select="local-name()" /></th><td><xsl:value-of select="." /></td></tr>
</xsl:template>
</xsl:stylesheet>


Bjavascriptファイル

// JavaScript Document
<!--
var readXml;
var xPos;
var yPos;
var myImage;
var iro=0;
function windowLoad(){
	readXml=new ActiveXObject("MSXML2.DOMDocument");
	readXml.async=false;
	readXml.load("./school.xml");
	var nameNode=readXml.selectNodes("//先生/氏名");
	var i;
	var nameData="";
	
	for(i=0;i<=nameNode.length-1;i++){
		nameData=nameData + "<option value='" + nameNode(i).text + "'>" + nameNode(i).text + "</option>";
	}
	
	var listData="";
	listData="<select style='width:130px;' name='selectName' size='" + nameNode.length + "' onchange='DataShowGo()'>" + nameData + "</select>";
	document.getElementById("oldManName").innerHTML=listData;
	
	var ichiNode=readXml.selectNodes("//先生");
	xPos=new Array(ichiNode.length);
	yPos=new Array(ichiNode.length);
	myImage=new Array(ichiNode.length);
	
	for(i=0;i<=ichiNode.length-1;i++){
		xPos[i]=ichiNode(i).getAttribute("位置x");
		yPos[i]=ichiNode(i).getAttribute("位置y");
		myImage[i]=ichiNode(i).getAttribute("写真");
	}
}

function markMove(){
	var posNo=myForm.selectName.selectedIndex;
	with(document.getElementById("maru").style){
		document.getElementById("maru").style;
		marginLeft=xPos[posNo] + "px";
		marginTop=yPos[posNo] + "px";
	}
		document.getElementById("personalImage").src=myImage[posNo];
		with(document.getElementById("personalImage").style){
			visibility="visible";
			marginTop="230px";
			marginLeft="610px";
		}
		var myTimer=setInterval("markBlink()",100);
}


function DataShowGo(){
	var selectName=myForm.selectName.options.value
	if(selectName!=""){
			var xslt=new ActiveXObject("MSXML2.XSLTemplate");
			var xsldoc=new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
			var xmldoc=new ActiveXObject("MSXML2.DOMDocument");
			xsldoc.async = false;
			xsldoc.load(".school.xsl");
			xslt.stylesheet = xsldoc;
			xmldoc.async = false;
			xmldoc.load("./school.xml");
			var xslproc = xslt.createProcessor();
			xslproc.input = xmldoc
			xslproc.addParameter("userName",selectName);
			xslproc.transform();
			var resultData=xslproc.output;
			document.getElementById("personalInfo").innerHTML=resultData;
			markMove();
	}
}


引用返信 編集キー/
■16174 / inTopicNo.2)  Re[1]: XMLの改行について、HTMLで表に表示される改行
□投稿者/ 魔界の仮面弁士 (682回)-(2008/03/30(Sun) 03:55:34)
2008/03/30(Sun) 03:59:13 編集(投稿者)
No16171 (ゆっちん さん) に返信

投稿時のミスとは思いますが、そもそも、XML になっていないようです。
#「<学校案内>」が 2 つに、「</学校案内>」が 1 つ…。


そして、XSLT の方はといえば、<caption2> という謎の HTML タグがあったりして、
文法的に正しく無いように見えます。また、その出力内容を見ると、
 <xsl:value-of select="学校案内/クラブ" />
という記述が見受けられますが、元の XML を見る限り、学校案内/クラブ は存在しません。
# 学校案内//クラブ ならばありますけれども。


JavaScript (正しくは、JScript ですね) の方は、myForm や personalInfo 等を含む
ドキュメントのサンプルがありませんし、そもそもそれぞれの function が、どこから
どのタイミングで呼ばれるのかが不明瞭なため、検証しにくいです。
# 一覧から先生の名前を選んで、それを整形するようになっている事はわかりますが…。



ということで、検証できる形になっていないので、正直、具体的な回答を付けにくいです。


> 挨拶のところが<br>を使っても改行できず困っています。
<br> を、どのように使ったのでしょうか?

・元の XML に、<br/> を埋め込んだ。
・XSLT 側で、<挨拶> 中の改行を探して、そこに <br> を出力した。
・JScript 側で、<br> を埋め込むようにした。
・それ以外の方法。


また、最終的に生成された「<br> を使ったが改行されなかった」という HTML は、
具体的にはどのような内容になったのでしょうか?


> 改行できるようにするにはどうすればよいか
手抜き案ですが:
改行を含むデータを CDATA セクションにしておき、HTML 側では、<td> 内に <pre> や
<textarea readonly> を配置し、その中に埋め込まれるように出力してみては如何でしょう。

引用返信 編集キー/
■16366 / inTopicNo.3)  Re[2]: XMLの改行について、HTMLで表に表示される改行
□投稿者/ ゆっぴい (1回)-(2008/04/03(Thu) 17:50:08)
2008/04/05(Sat) 10:18:09 編集(投稿者)

早々にアドバイスありがとうございます。
初心者で本当にすみません


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -