繁体   English   中英

生成递归目录搜索的XML映射

[英]Generate XML mapping of a recursive directory search

我正在阅读一个列表,该列表在某些组件下具有大量存档。 例如

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

我需要递归地解压缩每个归档,直到最后一级数据,并生成一个XML映射文件,捕获从组件到归档中最后一个元素的正确映射。

其xml文档结构如下:

<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>

做那个最好的appraoch是什么? 我正在考虑使用DOM解析器来生成XML。

由于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

我也可能不会打扰DOM解析器来打印XML。 你可以在内存中构建一个(可能很大的)结构,而不是在你去的时候将数据打印到流中。 此外,解析器用于将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对象。

我会用gradle做这个。

Gradle有很好的内置设施可以解压缩档案。 您可以使用groovy(带有gradle)进行XML解析/生成,这比使用Java XML库要简洁得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM