XML の本文部分の名前空間あたりがうまいこと決まらないので思いつくまで放置。
なんか軽いのが書きたい。
ある関数の比較
function _load_flavors() { $xns = $this->_xpc->xpath_eval("/config:config/config:flavors/config:flavor"); foreach ($xns->nodeset as $node) { $ext = $node->get_elements_by_tagname("extension"); $ext = $ext[0]->get_content(); $content_type =$node->get_elements_by_tagname("content-type"); $content_type = $content_type[0]->get_content(); $this->flavor[$ext] = $content_type; } $this->default_flavor = $this->_xpc->xpath_eval_expression("string(/config:config/config:flavors/@default)"); $this->default_flavor = $this->default_flavor->value; }
private def load_flavors @flavors = {} @doc.elements.each("/config/flavors/flavor") do |ele| @flavors[ele.text("extension")] = ele.text("content-type") end @default_flavor = @doc.root.elements["flavors"].attributes["default"] end
でもここで使ってる Ruby の REXML
というパーサは名前空間をあんまり (ほとんど?) 考慮してない (だから接頭辞がついてない。読み込んでいるドキュメントはデフォルト名前空間でやっていて接頭辞がないから) REXML
は XPath とか使えるしイケてるけど、やっぱ微妙な部分がいくつかあるわけです。
PHP は書いた気になれる。んで後から読むと読み難い。実際には一回の代入が二行になっていたりするから。だからといって一行に纏めても読み難い。
PHP4 には例外もない。5 からあるけど、5 でやっと?みたいな勢い。