それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rubyのNokogiriをもっと簡単に!Slopする。

ruby のNokgiri をもっと簡単に使いたい。

PHPのSimpeXMLに負けてる気がします。JSON.load にも負けてる気がします。

NokogirのSlopを見つけた

doc = Nokogir::Slop("<book><title>日常に潜む数理曲線</title></book>")
doc.book.tile.text #=> 日常に潜む数理曲線

これが出来る。

もういちいち、searchで降りて行かなくていいんです。オブジェクトしてアクセ出来るようになってとても便利なんです。

実際にやってみた

次のような。XMLがあるとき

users.xml

<?xml version="1.0" encoding="utf-8"?>
<users>
    <user>
        <loginId>takuya@mmmm.jp</loginId>
        <passwd>************</passwd>
        <tel>080-****-3141</tel>
        <mail>takuya+aaa@mmmm.jp</mail>
        <firstName>takuya</firstName>
        <lastName>mmmmmmmmmm</lastName>
    </user>
    <user>
        <loginId>takuya@mmmm.biz</loginId>
        <passwd>***********</passwd>
        <tel>080-*****-****</tel>
        <mail>takuya+bbbbbb@mmmmmm.biz</mail>
        <firstName>takuya</firstName>
        <lastName>mmmmmmmmmm</lastName>
    </user>
</users>

これを、Slopする

doc = Nokogiri::Slop( open("users.xml").read )
doc.users.user.size #=> 2
doc.users.user[0].loginId #=>takuya@mmmm.jp
doc.users.user[1].mail #=> takuya+bbbbbb@mmmmmm.jp

このように、オブジェクトしてアクセスができるようになってガッツリ便利。

JSONも便利だけどXMLも便利

XMLは、設定ファイルの細かいシンタックスエラーが出にくいので、とても好きだ。

JSONは配列の「,」抜けや、オブジェクトの { } の個数が合わなくなったりする。

JSON.dump 以外の手法でJSON作るのはマジ苦痛。String#+で作る行為すら嫌。

大きいデータを受け渡す時や繰り返し構造があるときはJSONよりXMLのほうが圧倒的に扱いやすい。

Slorがあるとわかればもっと活用できますね。

参考資料

Searching a XML/HTML document - Nokogiri 鋸

PHP: Examples - Manual

JSON vs XML。サブセットを考えるとXMLのほうが扱いやすい

JSON 便利ですけど、

JSONって便利なんですけど、JSONの一部を切り出してもJSONにならないんですよね。

とくに関数を抜いたデータだけと考えると、JSONって便利なのかなぁって思うようになった。

{
 "user" : [
  { "name" : "takuya", "age" : "19" },
  { "name" : "mirai"  , "age" : "17" },
  { "name" : "tsurai" , "age" : "39" }
]
}

ここから、適当に切り出したら、

[
  { name: "takuya", age: "19" }, // このカンマ邪魔!
]

なので、JSONを手作業で編集や String#+ で作るのは結構面倒だったりする。

結局JSONパッケージに頼ることになる。

XML は何処を切り出してもXML

本当に金太郎飴になるのはXMLなのです。

<?xml encoding='utf-8' ?>
<user>
<name>takuya</name><age>19</age>
<name>mirai</name><age>17</age>
<name>tsurai</name><age>39</age>
<name>mari</name><age>14</age>
</user>

ダブルクオーテーションとかいらないし、この方が圧倒的に書くのが楽。

ここから切り出しても

<name>mari</name><age>14</age>

切り出した単体もチャントXMLとして認識できる。

XMLってやっぱり便利じゃん。面倒なのはパースだけど、各言語にlibxml や xpath コマンドが枯れててずっと使いやすい

ただし、XMLには属性値という書き方もあって安定しないんだけど。

<user name="takuya" age="19" />

このへんはまだ許せる

<user age="19" ><name>takuya</name></user>

こういうのされるともう激おこするしかない。

いくら気をつけても、編集やシステム間のデータ移動を繰り返していると、こういうデータが出てきてしまう。ここさえなんとかなればなぁ。

手作業で編集させるならXML

JSONでも、シンタックスエラーや、 ダブルクオーテーション、カンマ、セミコロンなどの、閉じブラケット、カーリーブレイスのゴチャゴチャを考えるなら、もうJSONしんどいってなる。

JSON手作業やStringの++で作るのはもうシンドい。

属性とノードのアレコレはあるけどXMLは安定してる・・・

編集性能考えたら圧倒的にXML だと思います。

シンタックスエラーもブラウザにドロップするだけ。JSONだとコンソールあけて・・・

XMLXpath意外と行ける。

XMLってXpathでデータ持てるから、手作業でデータ修正もミスが少ない。

特定のデータ探すのにもXpathを使えばいい。

過去にもXpathに結構ハマってて。色々やってる。

document.evaluate でXPATH する具体的サンプル - それマグで!

データ交換ならやっぱりJSON

require 'json'
JSON.dump({})

これだけでJSONだけできるのはやっぱり魅力ですよねぇ

でも、もし手作業が少しでも含まれるなら、XMLって結構優秀だと思うんですよね。

いや、まぁ、世間には、アプリ側からMySQLへコネクション張って、直接SQLを叩いちゃう強者も要るようですから・・・・TLSしてるんだろうな・・・もちろん