トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     XMLで読み込んだテキストが改行されない
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ひろゆき
Åê¹ÆNo.29055
投稿日時: 2006-9-30 12:55
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: XMLで読み込んだテキストが改行されない
まず、なぜ、このスレッドに投稿されたのでしょう?
このスレッド自体は、CSSとは直接関係ないと思われるので、
新規スレッドにされるべきではないでしょうか?

もし、改行コードに関してのスレッドだから、ということであれば...。
引用:
XMLを読み込んだ際にXMLファイル内で改行すると行間の幅がダブルスペースぐらいになる問題が起きました。

この原因は、XMLファイルの改行コードがCR+LFになっているためだと思われますので、
CSS うんぬんは、一旦すべて忘れて、スクリプトからも削除して
さらに、XMLからも<br />を削除して
次の2点のいずれかで試された方がよろしいかと思います。

(1) XML ファイルを保存する際、改行コードを「LF(UNIX)」で保存する。
  #改行コードを選択できるテキスト・エディタを用いてください。

(2) テキストフィールドで表示する際に、改行コードを統一する。
  #テキストボックスというインスタンスはないと思います。
  #テキストフィールドでしょうか?
  #あるいは、TextAreaコンポーネントでしょうか?
function loadXML(loaded:Boolean):Void {
	if (loaded) {
		text_01.text = unifyLineFeedCode(this.firstChild.childNodes[0].firstChild.nodeValue);
	}
}
function unifyLineFeedCode(str:String):String {
	var CR:String = String.fromCharCode(13);
	var LF:String = String.fromCharCode(10);
	str = str.split(CR+LF).join(LF);
	str = str.split(CR).join(LF);
	return str;
}


それから、ヘルプで「サポートされている CSS プロパティ」を確認してください。
word-spacing, line-height はサポートされていないと思います。
また、em という単位も有効ではなく、px で解釈されるのではないかと思います。


引用:
偶然外部CSSファイルを読み込むスクリプトをアクションスクリプトに明記すると、XML内部の「<br/>」タグで改行される事がわかりました。

これについては、上記の改行問題が解決したうえで、
理解できない部分を整理したうえで、別途スレッドを立てられた方が良いでしょう。

でないと、問題が複雑化するだけのように思います。


----------------
質問する際は、回答者に具体的な情報を与えてください。

ゲスト
Åê¹ÆNo.29053
投稿日時: 2006-9-30 12:02
Re: XMLで読み込んだテキストが改行されない
こんにちは、初めて投稿させていただきます。

随分前のトピックで恐縮なのですが、現在多言語をサイトを構築しておりまして、XMLでテキストを読み込む作業をしています。言語によって文章の長さが違うので改行が必要になり、やはりXMLを読み込んだ際にXMLファイル内で改行すると行間の幅がダブルスペースぐらいになる問題が起きました。

色々と調べてみたのですが、なかなかよいアイディアが無く、偶然外部CSSファイルを読み込むスクリプトをアクションスクリプトに明記すると、XML内部の「<br/>」タグで改行される事がわかりました。

自分はアクションスクリプトに関してド素人ですので、なぜ今回試した事によって「<br/>」タグがXML>Flashにて使えるようになったのか検討がつきません。 是非皆様のご意見を伺えたらと思います。



/*-----------------AS-------------------*/

System.useCodepage = true;

//load css
myStyle = new TextField.StyleSheet();
//myStyle.load("test.css");

//Apply CSS to text Fields
text_01.styleSheet = myStyle;


//load XML
function loadXML(loaded) {
if (loaded) {
//location in the XML file & OUTPUT
text_01.text = this.firstChild.childNodes[0]//.firstChild;

} else {
trace("file is not loaded!");
}
}
myContent = new XML();
myContent.ignoreWhite = true;
myContent.onLoad = loadXML;
myContent.load("test.xml");

/*------------------------------------*/


上記の通りCSSは反映されていないのでCSSの内容は省略します。
次にXMLです。


/*----------------test.XML-----------------*/
<test_xml>
<top>This is<br/>just a test.</top>
</test_xml>

/*------------------------------------*/


----------------------
This is
just a test.
----------------------
(isの部分で改行されます。)


まず初めに今回使用したアクションスクリプトの一部です。
ご覧のとおりCSSファイルを読み込むスクリプトは明記して
あるのですが、

//myStyle.load("test.css");

の部分をコメントアウトしていますので実際は読み込んでいません。
これはコメントアウトしても問題がなかったという事です。

それからCSSによる

letter-spacing: X em;
word-spacing: X em;
line-height: X %;

などは明記してもFlashには反映されませんでした。

それからXMLを

/*-----------------AS-------------------*/
text_01.text = this.firstChild.childNodes[0]//.firstChild.nodeValue;
/*-----------------AS-------------------*/

上記の様にtext_01というテキストボックスに表示させるのですが、

本来は、

/*-----------------AS-------------------*/
text_01.text = this.firstChild.childNodes[0].firstChild.nodeValue;
/*-----------------AS-------------------*/


と最後の

「firstChild.nodeValue;」

を付ける必要があるのですがコメントアウトしてみました。因みにこの部分があると「<br/>」タグ以降の部分が表示されません。

なぜ上記で「<br/>」が使えるのか全く検討が付かないのですがこれは本来この様に明記するものなのでしょうか? どなたか教えていただけますでしょうか?  宜しくお願いします。
Sif
Åê¹ÆNo.13042
投稿日時: 2004-12-4 20:01
半人前
居住地: たこ焼き王国
投稿: 36
使用環境:
XP SP2 Home
Pro 7.2
Re: XMLで読み込んだテキストが改行されない
こんにちは。

なるホド!
youichさんの情報より[使用を避ける言語エレメント]と、
その代替エレメントを比較してみると、おもしろいですね?

[chr()]は、引数がひとつだけのため、1文字の処理速度としては早かった。
[random()]は、昔は整数でランダム値を返していたため、同じく早かった。
という感じでしょうか。

youichさん、勉強になりました。
ありがとうございます?
youich
Åê¹ÆNo.13036
投稿日時: 2004-12-4 13:49
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: XMLで読み込んだテキストが改行されない
引用:


些細なことですが、[chr(number)]コマンドは[使用を避ける言語エレメント]
としてMacromediaが定めておりますので、代わりに[String.fromCharCode()]を
使用された方が良いかと思われます?
 (アゲアシすいません…)
Flashのヘルプに記載されていますので、ご確認ください。
 (youichさんの環境[Flash MX]での記載箇所が分かりませんので
  説明は省略させていただきます)

お、これは失礼しましたSifさんのおっしゃる通り使用を避けるべきものでしたね、ありがとうございます。
これだけではなんなんで、雑談でも(笑)

だいたい、random等のようにFlash4のころの関数のほうが一般的に
処理速度が速いです、chrもString.fromCharCodeより2,3倍速いと思います。

しかし、文字列を作る場合はString.fromCharCodeの方が便利だし
文字コードを配列で用意できる場合等は
String.fromCharCodeの引数に直接配列を渡すと圧倒的に速いです。
失礼しました。


----------------
- yo

Sif
Åê¹ÆNo.13024
投稿日時: 2004-12-4 1:44
半人前
居住地: たこ焼き王国
投稿: 36
使用環境:
XP SP2 Home
Pro 7.2
Re: XMLで読み込んだテキストが改行されない
こんにちは。

 (文中の"\"は円マークに読み替えてください)

yoshi04さん、おめでとうございます?
youichさん、ありがとうございます?

解決されてバンザイなのですが、ぢつは自分自身の前回の書き込みで
試した手順に少し不思議な点がありましたので、報告させていただきます。

"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

と前回書きましたが、本日再チャレンジしたところ、キチンと"\r\n"を"\n"に
置換することができました。
「はて?
と思い、前回に試したことを思い出してみると、
// 前回
// ステージに配置したダイナミックテキストにXMLテキストノードを
// 読み込み、そのテキストをステージ上とデバッガで確認していました
test_txt.text = <読み込んだXMLテキストノード>
test_txt.text = test_txt.text.split("\r\n").join("\n");
// 置換結果は"\r\r"でした。

// 今回
// 変数にXMLテキストノードを読み込み、そのテキストを
// traceとデバッガで確認していました。
var test_str:String = <読み込んだXMLテキストノード>
test_str = test_str.split("\r\n").join("\n");
trace(test_str);
// 置換結果は"\n"でした。

という感じでした。

改行コードは、テキストフィールドに代入した時点で
見えないチカラが働いてしまうのでしょうか。
不思議デス…
何なのでしょう


P.S. youichさんへ
些細なことですが、[chr(number)]コマンドは[使用を避ける言語エレメント]
としてMacromediaが定めておりますので、代わりに[String.fromCharCode()]を
使用された方が良いかと思われます?
 (アゲアシすいません…)
Flashのヘルプに記載されていますので、ご確認ください。
 (youichさんの環境[Flash MX]での記載箇所が分かりませんので
  説明は省略させていただきます)
yoshi04
Åê¹ÆNo.13007
投稿日時: 2004-12-3 15:53
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
youichさんご丁寧に本当にありがとうございます。
引用:

youichさんは書きました:
引用:

yoshi04さんがポストされたアプリケーションから書き出されているというXMLファイルの
空白の部分が全角の空白になっているからです。
全角の空白を□で表すと↓のようになっています。

<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>

全角の空白はignoreWhiteをtrueに設定していても
意味のあるテキストノードとして処理されます。



そうなんですね。全角の空白部分を削除するとちゃんと表示します。
使っているアプリケーションでXMLファイルを書き出すとものすごい
見にくいファイルになっています。なぜああなるのか…
youichさんの書いていただいたテストコードでもっと勉強します。
youichさんどうも有り難うございました。
youich
Åê¹ÆNo.13004
投稿日時: 2004-12-3 14:09
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: XMLで読み込んだテキストが改行されない
引用:


youichさんから教えていただいたコードではうまくいきませんでした。 まだアクションスクリプトをあまり理解していないので僕の書き方に問題があるのかも

yoshi04さんのアクションスクリプトの書き方がおかしいんじゃないと思いますよ(笑)
yoshi04さんがポストされたアプリケーションから書き出されているというXMLファイルの
空白の部分が全角の空白になっているからです。
全角の空白を□で表すと↓のようになっています。

<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>

全角の空白はignoreWhiteをtrueに設定していても
意味のあるテキストノードとして処理されます。

で、私はこれをポストされた時のミスかバグだろうと考えて
全角の空白を半角の空白として考えてコードを書きました。

もしこの空白がミスじゃなく意味のあるものならば先にポストしたコードは
以下のようにcommentノードを探すのにもうひとつ(nextSibling)進める必要があります。

my_xml.onLoad = function(ok) {
	if (ok) {		 //contents  //comment  //text
		trace(this.firstChild.firstChild.nodeType); //3 テキストノード
		var comment = this.firstChild.firstChild.nextSibling.firstChild.nodeValue;
		var str = myTextField.text = comment.split(CRLF).join(LF);
		trace(str);
	} else {
	}
};


ついでに、いきさつが良く解るようなテストコードです。

System.useCodePage = true;

ZENKAKU_SPACE = " ";
HANKAKU_SPACE = " ";
LF = chr(10);
CRLF = chr(13) + chr(10);

var x = new XML();
x.ignoreWhite = true;
x.onData = function(d) {
	var s = d.split(ZENKAKU_SPACE).join("□");
	printTitle("そのままのxmlデータ");
	trace(s);
	s = s.split("□").join(HANKAKU_SPACE);
	
	printTitle("xmlデータの全角スペースを半角スペースに変換");
	trace(s);
	this.parseXML(s);
	this.onLoad(true);
};

x.onLoad = function(ok){
	if (ok) {		 //contents  //comment  //text
		var comment = this.firstChild.firstChild.firstChild.nodeValue;
		var str = myTextField.text = comment.split(CRLF).join(LF);
		printTitle("comment のtextnodeの改行をcrlf -> lf に変換");
		trace(str);
		
	} else {
	}
};
		
x.load("xxx.xml");

function printTitle(str){
	trace("----------------------------------------------------------------------");
	trace(str);
	trace("----------------------------------------------------------------------");
}


出力
----------------------------------------------------------------------
そのままのxmlデータ
----------------------------------------------------------------------
<contents>

□□<comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>
----------------------------------------------------------------------
xmlデータの全角スペースを半角スペースに変換
----------------------------------------------------------------------
<contents>

  <comment>サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm</comment>

</contents>
----------------------------------------------------------------------
comment のtextnodeの改行をcrlf -> lf に変換
----------------------------------------------------------------------
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm

引用:

解決していたスレッドに投稿して申し訳ありませんでした。

あら、最初のスレッドとは違うかったのですね、
先ほどはいっしょくたにポストしてすみませんでした。


----------------
- yo

yoshi04
Åê¹ÆNo.13002
投稿日時: 2004-12-3 12:53
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
引用:

"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

どうやら、別の切り口で攻めなければならないようです…

どなたか、ご存知の方よろしくお願いします?


Sifさんの試された下記のコードでできました?

node = convSentence(node, "\r\n", "\n");

youichさんから教えていただいたコードではうまくいきませんでした。 まだアクションスクリプトをあまり理解していないので僕の書き方に問題があるのかも

解決していたスレッドに投稿して申し訳ありませんでした。
空野さんSifさんyouichさんどうも有り難うございました。
yoshi04
Åê¹ÆNo.12999
投稿日時: 2004-12-3 9:24
半人前
居住地: 大阪府
投稿: 39
使用環境:
win2000,Flash MX 2004 pro
Re: XMLで読み込んだテキストが改行されない
こんにちは。いつもお世話になっています。
空野さんSifさんyouichさん返信どうも有り難うございます。
引用:

Sifさんは書きました:
こんにちは。

yoshi04さんの提示されているxmlをテキストにコピペして保存、
そのファイルをflaに[my_Xml.load]で読み込み、
さらにそのテキストノードをダイナミックテキスト
[myTextField.text]に流し込んだところ、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されるはずが、

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm

サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

と表示されてしまいました。

そうなんです。

━━━━━━━━━━━━━━━━
サイドブラシ使用時:690mm
サイドブラシ未使用時:500mm
━━━━━━━━━━━━━━━━

というふうに表示したいんですけど、一行余分に空いてしまいます。
youichさんのコードで試してみます。
みなさんどうも有り難うございます。
youich
Åê¹ÆNo.12996
投稿日時: 2004-12-3 4:46
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: XMLで読み込んだテキストが改行されない
引用:


と表示されてしまいました。
そこで、ダイナミックテキストの内容をデバッガで確認すると、
サイド?690mm\r\nサイド?500mm

のようになってしまっていました。
そこで、前述の置換関数convSentenceでいろいろと実験を
してみたのですが、下記のような症状です。
"\r\n"を"\n"に置換 → "\r\r" 改行2つのままに
"\r"  を""  に置換 → ""     改行ナシに

どうやら、別の切り口で攻めなければならないようです…

どなたか、ご存知の方よろしくお願いします?

私はMacなので意識することはないのですが、
windowsの改行は"\r\n"で、Flashは"\r"も"\n"も改行と認識しますので、
xmlに限らずloadVars等でもwindowsで作ったtextデータを
Flashで読みこむと一行開いた状態になるはずだと思います。

で、それは"\r\n"->"\n" or "\r\n"->"\r"の置換で空行を消せると思うのですが。。。
↓ではうまくいかないですか?

//System.useCodePage = true;
var my_xml = new XML();
my_xml.ignoreWhite = true;
my_xml.load('xx.xml');

CR = chr(13); //Mac
LF = chr(10); //Unix
CRLF = CR+LF; //Win

my_xml.onLoad = function(ok) {
	if (ok) {		 //contents  //comment  //text
		var comment = this.firstChild.firstChild.firstChild.nodeValue;
		myTextField.text = comment.split(CRLF).join(LF);
	} else {
	}
};


あ、逆に最初はXMLのtextが改行されないという話題だったんですねー
そこは改行コードをHTMLエンティティ化してやればどうなんでしょう?("&"全角にしてます)

<contents>
	<comment>サイドブラシ使用時:690mm&#10;サイドブラシ未使用時:500mm</comment></contents>


----------------
- yo

(1) 2 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops