2006-03-01 ========== てきとう E4X ------------ Reference URI: http://lowreal.net/logs/2006/03/01/1 Written Time: 2006-03-01T14:11:49+09:00 Tags: e4x js どうにも使い道が少ない E4X (ECMAScript for XML) をちょっとメモる。 基本的に XPath (XML Path language) (の省略記法) に似ているので、相違点とかあげつつみたいな。XPath (XML Path language) は E4X (ECMAScript for XML) に似せるため省略記法を使います。省略しないと全然違う。 var doc = hoge huga pqpq ;doc.baz..foo: /root/baz//foo E4X (ECMAScript for XML) ではルートノードがない。 doc..foo.(@name == "neko"): //foo[@name = 'neko'] E4X (ECMAScript for XML) では括弧の前にドットがいる。括弧の中は ECMAScript の式そのまま。すなわち or は ||, and は &&。 doc.*: /root/* * はそのままの意味。@* もそのまま書ける。 doc..foo[0]: //foo[1] 数値は普通の ECMAScript 配列とかとと同じように 0 基準。 doc..foo.length(): count(//foo) XPath (XML Path language) の例はどうでもいいけど、数を知りたいときは length() を使う。括弧をつけず length と書くと length 要素を選択しようとするので注意が必要。 for each とかいう構文がある (構文?) for each (ele in doc.*) { // hoge}XMLList とかいうオブジェクトがある。無名の要素をルートにして作る。ちょっときもい。 // XMLList (DOM の DocumentFragment みたいなの)var xmlList = <>
  • 1
  • 2
  • 3
  • ;var doc =
  • 999
  • ;doc.appendChild(x mlList);doc.toString() //=>
  • 999
  • 1
  • 2
  • 3
  • 名前空間 var rssDoc = Example http://example.co m/ ex3 http://example.com/3 2006-03-01T13:52:32+09:00 ex2 http://example.com/2 2006-03-01T13:52:30+09:00 ex1 http://example.com/1 2006-03-01T13:52:24+09:00 ; var rdf = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");var rdfs = new Namespace("http://www.w3.org/2000/01/rdf-schema#");var rss = new Namespace ("http://purl.org/rss/1.0/");// var dc = new Namespace("http://purl.org/dc/elem ents/1.1/");for each (i in rssDoc.rss::channel.rss::items.rdf::Seq.rdf::li) { var item = rssDoc.rss::item.(@rdf::about == i.@rdf::resource); alert(item.rss: :title);}見ればわかるように Namespace オブジェクト作って :: を解決に使うみたい。使わないなら別に宣言しなくてもいい。あくまで E4X (ECMAScript for XML) でアクセスするために名前をつける (=変数に代入する) ので、別にどんな名前でもいい。 var h = new Namespace("http://www.w3.org/1999/xhtml");default xml namespace = h;v ar HtmlDoc = E4X

    for (;;)

    ;みたいなこともできるみたい。 XPath (XML Path language) における following-sibling 軸のようなメソッドはないっぽい?とりあえず眺めてみたらないっぽい。よくわからん。 しかし、GreaseMonkey で E4X (ECMAScript for XML) を使うにしても、XMLHttpReqeust のハンドラぐらいでしか使えなくてなんともかんとも。 もちろん生成するのは自由なんだけど…… @ の働きがいまいちわからない。ちゃんと仕様読もう