2011年3月5日土曜日

e4xのXML.prototypeは変更できないらしい

今日もポチポチとRhinoでxmlを読むコードを試してました。 どうやらe4xには「要素.hasChildNodes()」のメソッドが無いようですね。 代わりにこんな感じでいいのかな?

if(0 < 要素.*.length() )
{
    子要素があるときの処理
}

一応動いているようだけど、よく確認してません。 ほんとにこれでいいんでしょうか?

まぁ、コードの正しさは必要に迫られたときに確認するとして、見栄えのためにprototypeに登録してみました。 グローバルで次のコードを追加。

XML.prototype.hasChildNodes = function()
{
    return 0 < this.*.length();
}

hasChildNodesを使ってみると...

TypeError? 「hasChildNodesなんて関数は見つかりませんよ」といわれました。 何かな~と思って検索してみたら、どうやらXML.prototypeは書き換えられない仕様のようです。

prototypeはReadOnlyとか書いてあるし。

実装ごとにグチャグチャになるのを防止するための仕様みたいですね。 見栄えが改善できないのはちょっと残念。