最近ではコンテンツ中の文字情報などを外部のXMLで持たせるということは一般的になってきていますが、今日はそのXMLのパースではまったのでしょぼいながらもまとめておきます。
事象としては、nodeValueにhtmlTextで使用する改行を意味する<br/>が入るとこの改行マークの前後でテキストデータがスプリット(分割)されてしまうという状況です。
事象としては、nodeValueにhtmlTextで使用する改行を意味する<br/>が入るとこの改行マークの前後でテキストデータがスプリット(分割)されてしまうという状況です。
例えばXMLファイルが下記のような状態だったとします。
【data.xml】
<data>
<text>改行の前<br/>改行の後</text>
</data>
これをFlashでパースしようとすると次のような形になると思います。
【コード】
var objXML:XML = new XML();
this.objXML.ignoreWhite = true;
this.objXML.onLoad = function(success:Boolean) {
if (success) {
parseXML();
}
};
function parseXML():Void {
パース処理
}
this.objXML.load("data.xml");
さて、そのパース処理ですが下記のようになっている場合、本来は取得したい「改行の前<br/>改行の後」が取得されず「改行の前」だけが取得されます。
trace('×:' +objXML.firstChild.firstChild.firstChild.nodeValue);
trace('×:' +objXML.firstChild.firstChild.firstChild);
よくよく考えるとわかるのですが、<br/>だから全部ひっくるめてひとつのノードのように感じるのですが、<br />もれっきとしたノードであり、その前後でノードが分かれるのは当たり前のことなんですね。
ということで、この一見するとひとつのノードに見えるテキスト部分はchildNodesで参照すると次のように参照することが出来ます。
childNodes[0]...「改行の前」
childNodes[1]...「<br/>」
childNodes[2]...「改行の後」
ということでこれらを全部合体させたものが求めている値となるわけですね。
var nText:String='';
for(i:Number=0;i<objXML.firstChild.firstChild.childNodes.length;i++)
nText += objXML.firstChild.firstChild.childNodes[i];
trace('○:' +nText);
非常に簡単なものなのでサンプルコードが必要かどうかわかりませんが必要であればダウンロードしてみてください。
改行<br/>を含むXMLノードのパースサンプルコード[ZIP:6KB Flash8]
いつになったらこの辺の基礎をマスターできて先へ進めることやら(笑)
【data.xml】
<data>
<text>改行の前<br/>改行の後</text>
</data>
これをFlashでパースしようとすると次のような形になると思います。
【コード】
var objXML:XML = new XML();
this.objXML.ignoreWhite = true;
this.objXML.onLoad = function(success:Boolean) {
if (success) {
parseXML();
}
};
function parseXML():Void {
パース処理
}
this.objXML.load("data.xml");
さて、そのパース処理ですが下記のようになっている場合、本来は取得したい「改行の前<br/>改行の後」が取得されず「改行の前」だけが取得されます。
trace('×:' +objXML.firstChild.firstChild.firstChild.nodeValue);
trace('×:' +objXML.firstChild.firstChild.firstChild);
よくよく考えるとわかるのですが、<br/>だから全部ひっくるめてひとつのノードのように感じるのですが、<br />もれっきとしたノードであり、その前後でノードが分かれるのは当たり前のことなんですね。
ということで、この一見するとひとつのノードに見えるテキスト部分はchildNodesで参照すると次のように参照することが出来ます。
childNodes[0]...「改行の前」
childNodes[1]...「<br/>」
childNodes[2]...「改行の後」
ということでこれらを全部合体させたものが求めている値となるわけですね。
var nText:String='';
for(i:Number=0;i<objXML.firstChild.firstChild.childNodes.length;i++)
nText += objXML.firstChild.firstChild.childNodes[i];
trace('○:' +nText);
非常に簡単なものなのでサンプルコードが必要かどうかわかりませんが必要であればダウンロードしてみてください。
改行<br/>を含むXMLノードのパースサンプルコード[ZIP:6KB Flash8]
いつになったらこの辺の基礎をマスターできて先へ進めることやら(笑)

コメントする