XMLのnodeValueに<br/>が含まれているときの注意点

最近ではコンテンツ中の文字情報などを外部のXMLで持たせるということは一般的になってきていますが、今日はそのXMLのパースではまったのでしょぼいながらもまとめておきます。

事象としては、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]


いつになったらこの辺の基礎をマスターできて先へ進めることやら(笑)

トラックバック(0)

このブログ記事を参照しているブログ一覧: XMLのnodeValueに<br/>が含まれているときの注意点

このブログ記事に対するトラックバックURL: http://www.2nd-pla.net/mt/mt-tb.cgi/44

コメントする

2008年8月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

ウェブページ

このブログ記事について

このページは、dIkeが2008年4月15日 01:02に書いたブログ記事です。

ひとつ前のブログ記事は「Flash Media Serverについてのお勉強 ~第1回~」です。

次のブログ記事は「活動休止」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。