2013年10月12日土曜日

groovyとApache MetaModelでXMLファイルに対してクエリーを実行する

groovyとApache MetaModelでXMLファイルに対してクエリーを実行するには、以下のようなコードを実行します。
@Grab(group='org.eobjects.metamodel', module='MetaModel-full', version='3.4.5')
import org.eobjects.metamodel.*
import org.eobjects.metamodel.xml.*

// XMLファイルに対するテーブル構造を定義
XmlSaxTableDef prjTableDef = new XmlSaxTableDef(
  "/projects/project",
  [
    "/projects/project@name",
    "/projects/project/owner"
  ] as String[]
)

dc = new XmlSaxDataContext(new File("projects.xml"), prjTableDef)
// テーブルを指定
table = dc.getDefaultSchema().getTableByName("/project")

// 所有者がuser2のプロジェクトを抽出
query = dc.query().from(table)
  .select("row_id", "@name", "/owner")
  .where(table.getColumnByName("/owner")).eq("user2").toQuery()
// Queryの表示
println query.toString()
// Queryの実行
ds = dc.executeQuery(query)
for(row in ds){
  // row_idとプロジェクト名、所有者を表示
  println row.getValue(0) + ":" + row.getValue(1) + ":" + row.getValue(2)
}

サンプルXMLファイル
<?xml version="1.0" encoding="UTF-8"?>
<projects>
  <project name="テストプロジェクト1">
    <owner>user1</owner>
  </project>
  <project name="テストプロジェクト2">
    <owner>user2</owner>
  </project>
  <project name="テストプロジェクト3">
    <owner>user3</owner>
  </project>
</projects>

動作環境
groovy 2.1.7, JDK7 update40

0 件のコメント:

コメントを投稿