• 締切済み

Javaにて複数のxmlファイル内の項目集計

Javaのバッチの設計を行っている中で挙がった要望からの質問です。 『質問』 Javaにて、複数のxmlファイルから、特定の項目の値のみを 一括で検索・集計するライブラリはありますでしょうか? ------------------------------------------------ 例)説明目的でタグ名は日本語表記です test1.xml <商品一覧> <商品> <品名>aaa</品名> <在庫>100</在庫> <販売日>20110826</販売日> </商品> <商品> <品名>bbb</品名> <在庫>200</在庫> <販売日>20110827</販売日> </商品> </商品一覧> test2.xml <商品一覧> <商品> <品名>aaa</品名> <在庫>300</在庫> <販売日>20110827</販売日> </商品> <商品> <品名>ccc</品名> <価格>50</価格> <販売日>20110828</販売日> </商品> </商品一覧> ↓ ここでtest1.xmlとtest2.xmlから ・品名aaaの在庫数の合計を検索したい ・発売日が20110827以降の商品を検索したい ------------------------------------------------ 単純に考えれば「全部読み込んで上から順番に該当分だけをバッファに詰め込んで~」 で済みますが、読み込みたいxmlファイルが数百ファイル、 全部で最大2ギガと膨大であるため、 「確かxmlと条件を指定すればSQLみたく  結果だけを返してくれるライブラリがあったような・・・  でも検索しても有料のツールぐらいしか出てこない。」 で、今回の質問に至ります。 Javaのプログラムにおいて例に挙げた目的に対する手段 またはライブラリについて心当たりがある方、情報よろしくお願い致します。 ※手段またはライブラリの存在有無の質問であり、  「○○というのがあるけど今回の目的だと処理が重くなりすぎて使い物にならない」  という事でも構いません。 ※勤務中は書き込みできない為、返信は翌日の夜以降となります。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.2

目的がはっきりわからないのですが,「複数のxmlファイルから、特定の項目の値のみを一括で検索・集計する」機能は,システムの中に含まれるものなのでしょうか? それともシステムの開発を便利に進めるための機能であり,システム自体には含まれないのでしょうか? メモリ上に読み込まずにご質問のようなことをしたいのであれば,通常は XML DBMS を利用することになると思います。 http://en.wikipedia.org/wiki/XML_database にあるとおり,オープンソースの XML DBMS もいくつかありますし,Javaから使うのであればXQJをサポートしているものであれば(実装がJavaでなくても)問題ないと思われます。XPathはXQueryに包含されてますし。 ただ完成するシステムの中に入れるのであれば,DBMSを入れるというのは当然設計上の大きな判断ポイントの一つになると思われるので,どれを採用するか/そもそも採用するか否かまで含めて,当然慎重に検討すべき事項かと思います(本来ならば設計の途中ではなく初期段階で検討する項目のように思われるので,冒頭の疑問を感じた次第です)。 いずれにせよ性能や機能などの評価を十分されることをお勧めします。

noname#147388
noname#147388
回答No.1

XPATH のことですね > SQLみたく~ でもあれってdocumentを全部読み込んでたきがする。 XMLBeans JAXA とかだったかな有名どころは

関連するQ&A

  • JavaでXMLといったら何を使いますか?

    JavaでXMLファイルを取り扱うときには、DOM, SAX, xerces, relaxer, XMLSchema, XPathといったキーワードが出てきますが、とりあえずXMLファイルを読めればいい、というときはどのライブラリを使うのがいいのでしょうか? 利用目的としては、単純なXMLからデータを読み込んで、それをVelocityテンプレートとマージしてファイルに保存することを考えています。 例 <javafile>  <name>Foo.java</name>  <class>   <modifier>public</modifier>   <name>Foo</name>   <method>    <modifier>public</modifier>    <modifier>static</modifier>    <type>void</type>    <name>main</name>    <arg>     <type>String[]</type>     <name>args</name>    </arg>    <body>     System.out.println("Hello");    </body>   </method>  </class> </javafile> から public class Foo{  public static void main(String[] args){   System.out.println("Hello");  } } を作る感じです。

    • ベストアンサー
    • Java
  • XMLファイルを読み書きしたい

    WindowsXP+VC++6.0です。 タイトルの通り、XMLファイルから値を読み込んだり書き込んだりしたいのですが、javaのSAXのように簡単に使えるAPIやクラスライブラリをご存知ないでしょうか?

  • java XMLファイル 操作

    現在javaにてXMLファイルにデータベースの接続情報を保存する処理を 作成しています。XMLファイルの読み書きは問題なく動作するのですが、テストの為にXMLファイルを更新(データベースの接続情報は誤りの状態)にしました。その後データベースに接続して行う処理を行う際にはエラーとなる事を期待しているのですが、正常に処理されてしまいます。XMLファイルを更新した時点でテキストエディタ等で確認すると確かに更新されています。 なぜデータベースに接続して行う処理が正常に流れるのか疑問です。 ただし、いったんシステムの実行を終了して、再度実行すると、期待通りエラーとなります。 何か分かる方がいらっしゃればと思い質問いたしました。 <XML読込> public Object readXML(){ Object objBean = null; try{ // XMLからオブジェクトへの変換オブジェクトを生成する。 XMLDecoder xmlDecoder = new XMLDecoder( new BufferedInputStream( new FileInputStream(this._strFile))); // 指定したXMLファイルからオブジェクトにデータを読み込む objBean = xmlDecoder.readObject(); // 変換オブジェクトを閉じる xmlDecoder.close(); }catch(FileNotFoundException e){ // 指定されたパス名で示されるファイルが開けなかった場合の例外 bs.Setlog("readXML","FileNotFoundException",e.getMessage()); } <XML書込> public Boolean writeXML(Object objBean){ try{ // オブジェクトからXMLへの変換オブジェクトを生成する XMLEncoder xmlEncoder = new XMLEncoder( new BufferedOutputStream( new FileOutputStream(this._strFile))); // 指定したXMLファイルにオブジェクトデータを書き込む xmlEncoder.writeObject(objBean); // 変換オブジェクトを閉じる xmlEncoder.close(); // XMLファイル書込成功 return true; }catch(FileNotFoundException e) { // 指定されたパス名で示されるファイルが開けなかった場合の例外 bs.Setlog("writeXML","FileNotFoundException",e.getMessage()); return false; // 書込失敗 } }

    • ベストアンサー
    • Java
  • Javaでxmlを扱う方法について

    Javaプログラミングで、XMLの扱いに詳しくないので、以下をお教えいただけると 嬉しいです。 次のようなXMLファイル(test.xml)があるとします。 <myxml> <version>1</version> <datas> <detail> <id>5</id> <value>234</value> </detail> <detail> <id>10</id> <value>223</value> </detail> <detail> <id>15</id> <value>223</value> </detail> <detail> <id>20</id> <value>223</value> </detail> </datas> </myxml> このXMLをメモリに読み込んで、<id>が10の<detail>だけを書き換えて、 同じファイルに出力するプログラムが組みたいのですが、 javaでのやりかたを 教えていただけませんか? 出力結果は、以下のようにしたいのですが・・・ <myxml> <version>1</version> <datas> <detail> <id>5</id> <value>234</value> </detail> <detail> <id>10</id> <value>424</value> ← ココだけ変えたい </detail> <detail> <id>15</id> <value>223</value> </detail> <detail> <id>20</id> <value>223</value> </detail> </datas> </myxml> 基本的なJavaプログラミングだと思うのですが、javaに詳しくないので、 ご教授いただけると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVA、pmd2xmlについて

    pmd2xmlについて質問です。 私は普段音楽をしておりますが、プログラム関係はさっぱりでかろうじてEXCELのマクロが組める程度です。 この度、コミpo!というソフトでカスタムしたデータ(xmlファイル)を、キャラみんというソフトで使用したいと考えていましたが、その際にxmlファイルをPMDファイルに変換しないといけません。 そこで、唯一引っかかった「pmd2xml」というJAVAのソフトを使おうと思ったのですが、正直何が書いてあるのかサッパリわかりません。 http://mikutoga.sourceforge.jp/pmd2xml.html 自分でやれたと思う事は ・環境変数にPATHを追加 ・JRE7のインストール です。 http://gyazo.com/5d076e8c5ffef1d45351f585cb1dcad0 どのようにコマンドプロンプトで入力をしてやればいいのでしょうか? jarファイル及び変換したいファイルは../ire7\bin内に入っています。 OSはwin7の64bitです。

  • xmlデータの検索

    下記のことを行いたいのですが方法がわからず困っています。 検索文字列を入力するフィールドがあるaaa.htmlと言うファイルがあります。 同じ階層にgggというディレクトリがあります。 そのディレクトリの中にはxmlファイルのみがあり、 全てのxmlファイルは同じフォーマットで構成されており、 xmlファイルの要素は下記のようになっています。 <1234>  <abcd>☆☆</abcd>  <efgh>□□</efgh> </1234> aaa.html内の検索フィールドで入力して 検索ボタン(form action)を押すと gggディレクトリ内の全てのファイルを確認し、 xmlファイルの<abcd>要素と<efgh>要素を調べて マッチしたものがあればそのファイル中の子要素の値(☆☆や□□)を全て返してくれるような動きをさせたいです。 ※phpのバージョンは4.4.10です。 どのようにしたらよろしいでしょうか?

    • ベストアンサー
    • PHP
  • xmlファイルとは、なんですか?

    xmlファイルとは、なんですか? 私はあるソフトを使っていて最近あるソフトのサイトでアップデートの公開があったのでDLしたのですが その内容の中に【スクリプトエンジン】という機能が搭載されてて、 xmlファイルを読み込んでコンパイルして~~~~~ と書いてたのですが、xmlファイルとはなんですか? 近日にxmlファイルのテンプレートの公開するらしいのですがもう2週間近くたってますし自分で調べて使えるものならと思い質問させて戴きました。 あるソフトを元に多数のサイトである事をするのですが、 このソフトは対応サイトがある程度決まってて、色々なサイトに対応する為にスクリプトエンジンを搭載したそうです。 IEの上に開発者ツールってのがあるのは知ってますがアレが絡んでるのでしょうか? xmlファイルやスクリプトエンジンやコンパイルで検索したのですがなにやらその部類の横の層だけでも結構幅広く感じられ、 分かる方に教えて頂けたらいいなと思いました。 お願いします。

  • 現在、JAVAのXML/DOMを利用して

    現在、JAVAのXML/DOMを利用して XMLを生成してタグ、インデントを含めそのまま WEBブラウザに出力するようにしたいと思っていますが、 この場合、XMLのタグがWEBブラウザでタグと認識され、除去されてしまいます。 XMLのタグを除去せず、そのまま画面に表示することは可能でしょうか? 可能であれば、その方法を教えていただけませんか? 宜しくお願いします。 今書いているコード DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; builder = factory.newDocumentBuilder(); DOMImplementation domImpl = builder.getDOMImplementation(); Document document = domImpl.createDocument("","test",null); Element test = document.getDocumentElement(); Element aiueoNode = document.createElement("AAA"); Element abcdeNode = document.createElement("BBB"); aiueoNode.appendChild(document.createTextNode("あいうえお"); abcdeNode.appendChild(document.createTextNode("ABCDE"); test.appendChild(aiueoNode); test.appendChild(abcdeNode); TransformerFactory tf = TransformerFactoryImpl.newInstance(); tf.setAttribute(TransformerFactoryImpl.INDENT_NUMBER, "2"); Transformer transformer = tf.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); PrintWriter out = new PrintWriter(response.getOutputStream(), true); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); DOMSource source = new DOMSource(document); transformer.transform(source, result); /**XMLを文字列にして出力**/ out.println(writer.toString()); 現在IE出力例は「あいうえおABCDE」ですが、下記のように出力したいです。 「<test>     <AAA>あいうえお</AAA>     <BBB>ABCDE</BBB> </test>」 宜しくお願いします。 java:1.6/tomcat:6.0/IE:8

    • ベストアンサー
    • Java
  • XMLファイルのattribute値を取得するには?

    ASP内の処理でwebからXMLファイルをLoadし、 そこからattribute値を取得するにはどうすればよいのでしょうか? ちなみにXMLファイル取得は成功しています。 使用スクリプトはVBscriptです。 以下がロードしたXMLファイルの内容です。 <?xml version="1.0" encoding="Shift_JIS" ?> <xml> <AAA width="2.15" <--この2.15と height="4.60" <--この4.60を取得したい /> </xml> 以下が今、途中まで作っているソースです。 <% language = "VBscript" %> <% Dim XmlDoc, objXmlError, objXmlNode Set XmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = false XmlDoc.setProperty "ServerHTTPRequest", true XmlDoc.load("http://localhost/test.xml") Set objXmlNode = XmlDoc.selectNodes("/root/AAA") ここから先がよくわからない %>

  • XMLからデータを取得

    いつもお世話になっております。 XMLファイルに含まれたデータの中から、特定のデータを検索するプログラムを作りたいと思っております。 <AAA Name="テスト">    <BBB x="2" y="2"></BBB>    <CCC Num="0001"></CCC>    <CCC Num="0002"></CCC> </AAA> XMLデータの形式は↑みたいな感じで、これが100以上あり、CCCタグは0~5個までです。 フォームにテキストボックスを配置し、そこに検索したい語句を入れ、 AAAタグのNameの中身と合致したら、BBB、CCCの属性をすべて取得して表示するということをしたいのですが、 どうにも上手くいきません。 VB2008を使用しております。 方法をご存知の方、ご教授ください……orz