2012-03-08 34 views
5

特定のコンポーネントの下で多数のアーカイブを持つリストを読んでいます。例: 再帰的なディレクトリ検索のXMLマッピングを生成する

component1:filelocation1/a11.ear 
component1:filelocation1/a12.ear 
component2:filelocation2/a2.ear 
component3:filelocation3/a3.ear 
component4:filelocation3/basefile.properties 

Iは、データの最後のレベルまで再帰的に各アーカイブを解凍し、アーカイブ内の最後の要素に構成要素から正しいマッピングを取り込むXMLマッピングファイルを生成する必要があります。

のXML文書構造は次のように次のようになります。それを行うための最善のappraochは何

<my-app> 
    <mapping> 
    <toplevel loc="filelocation1" filename="a11.ear" component="component1"> 
     <childlevel loc="." filename="x1.war"> 
      <childlevel loc="WEB-INF/classes" filename="abc1.class"/> 
      <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    <toplevel loc="filelocation1" filename="a12.ear" component="component1"> 
     <childlevel loc="." filename="x2.jar"> 
     <childlevel loc="org/test" filename="abc1.class"/> 
     <childlevel loc="org/test" filename="abc2.class"/> 
     </childlevel> 
     <childlevel loc="." filename="x3.war"> 
      <childlevel loc="WEB-INF/lib" filename="web1.jar"> 
      <childlevel loc="org/test" filename="abc1.class"/> 
     </childlevel> 
     <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    </mapping> 
    </my-app> 

? XMLを生成するためにDOMパーサを使用することを検討しています。

+0

追加するだけで、プロセスはテキストファイルからファイルリストを読み込み、各アーカイブを再帰的に解凍し、解凍してXMLマッピングを構築します。したがって、アーカイブをexpantに再帰的に呼び出すには、親要素が何らかの形で渡される必要があります。そうすれば、再帰的ループの外にいれば適切なxmlを持つことができます。このXMLには、開始したテキストファイルのすべてのアーカイブのデータが格納されます。 – rommel

+0

XML処理に使用する言語の設定はありますか? – menjaraz

+0

あなたの以前の投稿に関連している場合は、[tag:java]タグを追加できます。 – menjaraz

答えて

0

これはgradleを使用して行います。

Gradleには、アンパック用アーカイブに便利な機能が組み込まれています。あなたは、XMLの解析/生成のためにgroovy(gradleに付属)を使うことができます。これは、Java XMLライブラリを使うよりもはるかにクリーンです。

1

JARファイルもZIPファイルなので、Javaでこれを行う場合は、java.util.zipライブラリを使用します。 WARやEARに埋め込まれたJARを再帰的に開く必要がありますが、フラットファイルを含むディレクトリを踏み出す手間が省けます。また、java.util.zipライブラリによって提供されるZipFileのJarFileサブクラスを使用することもできます。

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html

私もおそらくXMLをプリントアウトするためのDOMパーサを気にしないだろう。データをストリームに印刷するときには、メモリー内に(潜在的に大きな)構造を構築することになります。また、パーサは、XMLをデータ構造に解析するためのものであり、その逆ではありません。標準Java DOM解析クラス、javax.xml.parsers.DocumentBuilderFactoryおよびjavax.xml.parsers.DocumentBuilderには、「print」コマンドが付属していません。 org.w3c.dom.Documentオブジェクトからの書式付きテキスト出力を作成する標準的な方法は、XSLトランスフォーマ(http://java.sun.com/webservices/reference/tutorials/jaxp/html/xslt.html#gghkqを参照)を使用することです。これはおそらくそれが価値よりも面倒です。あなたがこのプログラムをどのくらい伸ばしたいのかにかかっていると思いますが、あなたがここで何をしなければならないのかが分かっていれば、大きなDOMオブジェクトを作ることはできません。

関連する問題