Skip to content

Instantly share code, notes, and snippets.

@kkismd
Last active August 29, 2015 14:24
Show Gist options
  • Save kkismd/04849b05fb9890fa502d to your computer and use it in GitHub Desktop.
Save kkismd/04849b05fb9890fa502d to your computer and use it in GitHub Desktop.
kkismd 6月 30 11:08
フォーマットの決まったXMLをパースしてcase classに格納したいとき、
標準のscala.xmlだけで下記のようにやってみてるのですが、
https://gist.github.com/kkismd/87e073fadfa63423308a
このへんを省力化してくれるライブラリはありますか?
JSON -> case classはいろいろ見つかるんですがXMLは探しかたが悪いのか見つかりませんでした。
mather 6月 30 12:08
scalaxbでしょうか。
xuwei-k 6月 30 12:13
json4sにxmlとjsonの変換とかあるのでそれ使ってcase classの変換不可能ではない?けど、どのくらい使えるのか微妙だし、json4s色々アレなので微妙な気はする(けど一応紹介)
https://github.com/json4s/json4s/blob/v3.2.11/core/src/main/scala/org/json4s/Xml.scala
kkismd 6月 30 12:16
ありがとうございます。フォーマットは決まってますが、フォーマルなスキーマまでは用意されてないような場合にもscalaxbは使えるでしょうか? > @mather
json4sも見てみます
mather 6月 30 12:24
XMLの場合はそもそもデータ自体に型(int, string, array, etc)が定義されていないので、自動でパースするためのヒントとしてスキーマファイルは必須かと思っています。手っ取り早くやるには自分でXMLパースするしか無いかもしれません。
xuwei-k 6月 30 12:26
自分だったらjson4s使うくらいならScalaのxmlのライブラリ直で使うかなぁ(scalaxbはあまり詳しくない)
Saisse 6月 30 12:29
XMLだと何かしらの方法でマッピングを定義しないとなので、手で書いた方が速そうな感はありますねー
kkismd 6月 30 12:30
Option[String]からOption[A]に変換する関数がひと通りあれば、あとのボイラープレートは力技でもいいような気もしてきました…
(A = {Int, Double, DateTime, ...})
eed3si9n 6月 30 14:11
relaxng compact syntax とか前は書いた - http://www.relaxng.org/compact-tutorial-20030326.html
@kkismd
Copy link
Author

kkismd commented Jul 6, 2015

for { 
  foo <- Option[A]
  bar <- Option[B]
} yield Hoge(foo,bar)

この場合はOptionなので for 式でよい
ただしEitherのようなエラー情報を残したい場合は for でなく Applicative[Validation] を検討したい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment