2008年04月10日

DOM要素のtextContentプロパティについて

firefox拡張機能でXMLドキュメントを利用する時、DOMを使用していますが、そのプログラミングで参考になるサイト

・Geck DOMのリファレンス (Mozilla Developer Center)
http://developer.mozilla.org/ja/docs/Gecko_DOM_Reference

・ノード参照時におけるエラーハンドリング手法を学ぼう
http://jibun.atmarkit.co.jp/lskill01/rensai/dom03/dom01.html

上記で発見したこと。
・DOMを介してXMLドキュメントの要素のテキストデータを取り出すとき、textContentプロパティを使用していました。しかし、textContentプロパティは指定した要素とその全ての子孫要素のテキストデータを返すのが正しい仕様でした。

例. XMLファイルが以下の場合
<?xml version="1.0" encoding="UTF-8"?>
<library>
<category>
<id>A1</id>
<name>XML</name>
<book>
<id>9784894714816</id>
<title>XSLT Web開発者ガイド</title>
<price>3400</price>
</book>
</category>
</library>


category要素のtextContentプロパティは、
  A1
XML
9784894714816
XSLT Web開発者ガイド
3400

と、categoryとその子孫要素の全テキストデータを返します。

textContentプロパティを使用せずに、テキストデータを取り出すには、以下の記事を参考にして
・hasChildNodesメソッドとnodeTypeプロパティ
http://jibun.atmarkit.co.jp/lskill01/rensai/dom03/dom02.html

以前のサンプルプログラムの一部を修正して
( http://ajiblog.sblo.jp/article/13590528.html#more )

getXMLData: function() {
var req = new XMLHttpRequest();
req.open('GET', 'file:///d:/firefox/test.xml', false);
req.send(null);
if (0 != req.status) {
// XMLファイルの読み込みに失敗
return;
}
var results = this.evaluateXPath(req.responseXML, "library/category");
for(var i in results) {
var node = results[i];
if (node.hasChildNodes() && node.childNodes[0].nodeType == 3) {
var text = node.childNodes[0].nodeValue;
// 何か処理
} else {
// テキストが存在しなかった場合
}

}


となります。

posted by jun1 at 23:56| Comment(0) | TrackBack(0) | firefox
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/13854894

この記事へのトラックバック