大富豪家2.0の日記全体に公開

2005年03月28日
00:01
 XML
がAjaxで必要になるので泣きながら使ってみているのだが、

<data>
<x>100</x>
<y>200</y>
<z>300</z>
</data>

みたいなデータからからxやyの値を取得しようとすると
xmldoc.documentElement.childNodes.item(1).childNodes.item(0).nodeValue ⇒ 100
xmldoc.documentElement.childNodes.item(3).childNodes.item(0).nodeValue ⇒ 200

とか

xmldoc.getElementsByTagName('x').item(0).childNodes.item(0).nodeValue ⇒ 100

とか書く必要があるのだろうか。異常に面倒でなくね?
 

コメント    

2005年03月28日
00:34
なんだか妙に貧乏臭いコードですね。非構造化フォートランを見る思い。
2005年03月28日
00:46
walrus
ありゃ、同じところを同じレベルで悩んでますな。ちょうど今日検索してました。
MSXML2.0およびMSXML3.0では、selectNodesメソッドだとXPathが使えるみたいです。

http://www.utj.co.jp/xml/dev/dom/dxdom2_1.html

実際の使用例も探したのですが、見つかったのはなぜかPerlからWin32::OLE経由でMSXML2.0を使っているものになってしまいました。
いや、個人的には嬉しいですが ;-)

http://www18.tok2.com/home/koumori27/xml/mxperl/mxperl3.html
2005年03月28日
00:59
shinji
つうか、XMLは、COBOLの再来なのだよ。遅さに泣きたくなります。Java/C++ のオブジェクトに直接マップする方法があるはずなんだけど。
2005年03月28日
01:06
富豪家さんの域のお方でも泣かれることがあるのですね。
私は何でもいつでも、泣きながら袋小路に激突してあきらめることが多いですが。
2005年03月28日
01:54
mala
今、JavaScriptで動くRSSリーダーを作ってたりするのですが、
RSSを読み込んだら一気にJavaScriptのオブジェクトに変換するようにしてます。
http://ma.la/mirrorman/wiki.cgi/RSSMixer
http://la.ma.la/rss/
parseRSSというのがそれで、
ちょっとRSSに特化してるので、汎用性ないですが、

var data = {};
var xml = xmldoc.getElementsByTagName('data');
var child = xml[0].getElementsByTagName("*");
for(i=0;i<child.length;i++){
var tag = child[i].tagName;
data[tag] = child[i].firstChild.nodeValue;
}
こんな具合に、割と簡単に変換できると思います。

もしくは、JSON-RPCと呼ばれるものを使って
サーバーサイドでJavaScriptのデータ形式に変換してしまうのが良いです。
この例だとサーバーサイドで、
{data:{x:100,y:200,z:300}}
と変換してやって、
javascript側で、eval("res=" + responseText);
といった具合です。
これでres.data.x、res.data.yで参照できるようになります。
データ量も少なく変換の手間もかからないので、おすすめです。

JSONについてはこれ。
http://www.crockford.com/JSON/

Perl用のはまだないですが、作ってる人がいます。
http://www.donzoko.net/cgi-bin/tdiary/20050316.html
2005年03月28日
02:04
みなっち
異常にめんどくさいものですが、それが富豪的というものです :-P

walrusさんのコメントされているようにXPathとかXQueryとか使うのが筋なんでしょうね。でもやっぱりめんどくさい。
2005年03月28日
02:29
綾塚
僕も、XML は何かと無駄にめんどくさい気がするので嫌いです。
Shinjiさんの、

>XMLは、COBOLの再来なのだよ

に何か納得です^^;。
2005年03月28日
04:41
iToooooooooooooooooT
いま標準化が進んでいるSDOというJava APIは、DOMとかSAXといった汎用的なXML APIに比べると、ぜんぜんマシです。
ただし最初から企業主体で進んでいる標準化なので、ある意味きなくさいかも…
2005年03月28日
13:58
大富豪家2.0
沢山情報ありがとうございます! いずれにせよ結構面倒なものみたいですね。人間が読み書きするのも機械で扱うのも面倒なフォーマットって何なんでしょうね。

# YAMLなら少なくとも人間にとってはマシそうですが
# http://www.rubyist.net/~matz/?date=20030507#p02
2005年03月28日
18:39
みまぞう
YAMLとはてっきり、汎用文書フォーマットはヤメルという駄洒落かとおもったら、まともに読める表記を考えようという提案でした。

そうなのよね、リスプのカッコ、コッカだけでも、なにかとぶつくさいわれてたのにXMLはもっと鬱陶しいものね。

XMLって問題は人間にとって理解しにくいっていうこともあるけど、それを読むためのプログラムが書きにくいということも大きな問題なのですね。
2005年03月29日
02:03
安斎利洋
プログラムがテキストを読みこんでテキストを書き出すという原則を守っていたころにくらべて、GUIを持つことがあたりまえになってこの原則が崩れてしまって、かえってコンピュータは退化したような気がするんですよね。だからこれからは、XMLを読んで書き出すプログラムが連携していく方向を夢みて、泣きながらXMLにせねばならないかな、と思っています。

といいつつ、僕もDOMの力仕事がきらいなので、SAXのようなものを自分で作ってます。
2005年03月29日
05:32
iToooooooooooooooooT
ただでさえプログラミングの面倒なXMLに、暗号化とか電子署名をくっつけることを、仕事の一つにしています。最初は気が狂いそうになりました(苦笑)