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 = hogehugapqpq;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:00ex1 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