1

HTMLファイルと1つのXSLTファイルを入力として受け取り、HTML出力を生成していますが、フォルダーには複数のHTMLファイルがあり、それぞれを入力として受け取り、対応する出力ファイルを生成する必要がありますが、XSLT入力ファイルは毎回同じままです. 現在、私のコードでは、入力 HTML ファイルを取得するたびにコード ブロックを繰り返しています。これの代わりに、フォルダー内のすべての HTML ファイルを反復処理し、それらを入力ファイルとして 1 つずつ取得して、出力を生成したいと考えています。私の現在のコードでは、ファイル名も同様に固定されpart_1.htmlていますが、異なる場合があり、その場合、このコードは機能せず、問題が発生します。誰でもこの件で助けてもらえますか: ありがとう!

現在の Java コード (2 つのファイルのサンプル):

public void tranformation() {
        // TODO Auto-generated method stub
        transform1();
        transform2();
    }
    public static void transform1(){
        String inXML = "C:/SCORM_CP/part_1.html";
        String inXSL = "C:/source/xslt/html_new.xsl";
        String outTXT = "C:/SCORM_CP/part1_copy_copy.html";
        String renamedFile = "C:/SCORM_CP/part_1.html";
        File oldfile =new File(outTXT);
        File newfile =new File(renamedFile);
        HTML_Convert hc = new HTML_Convert();
        try {
            hc.transform(inXML,inXSL,outTXT);
            } catch(TransformerConfigurationException e) {
            System.err.println("Invalid factory configuration");
            System.err.println(e);
            } catch(TransformerException e) {
            System.err.println("Error during transformation");
            System.err.println(e);
        }
        try{
            File file = new File(inXML);
            if(file.delete()){
                System.out.println(file.getName() + " is deleted!");
                }else{
                System.out.println("Delete operation is failed.");
            }
            }catch(Exception e){
            e.printStackTrace();
        }
        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
            }else{
            System.out.println("Rename failed");
        }
    }
    public static void transform2(){
        String inXML = "C:/SCORM_CP/part_2.html";
        String inXSL = "C:/source/xslt/html_new.xsl";
        String outTXT = "C:/SCORM_CP/part2_copy_copy.html";
        String renamedFile = "C:/SCORM_CP/part_2.html";
        File oldfile =new File(outTXT);
        File newfile =new File(renamedFile);
        HTML_Convert hc = new HTML_Convert();
        try {
            hc.transform(inXML,inXSL,outTXT);
            } catch(TransformerConfigurationException e) {
            System.err.println("Invalid factory configuration");
            System.err.println(e);
            } catch(TransformerException e) {
            System.err.println("Error during transformation");
            System.err.println(e);
        }
        try{
            File file = new File(inXML);
            if(file.delete()){
                System.out.println(file.getName() + " is deleted!");
                }else{
                System.out.println("Delete operation is failed.");
            }
            }catch(Exception e){
            e.printStackTrace();
        }
        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
            }else{
            System.out.println("Rename failed");
        }
    }
    public void transform(String inXML,String inXSL,String outTXT)
    throws TransformerConfigurationException,
    TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        StreamSource xslStream = new StreamSource(inXSL);
        Transformer transformer = factory.newTransformer(xslStream);
        transformer.setErrorListener(new MyErrorListener());
        StreamSource in = new StreamSource(inXML);
        StreamResult out = new StreamResult(outTXT);
        transformer.transform(in,out);
        System.out.println("The generated XML file is:" + outTXT);
    }
}
4

4 に答える 4

2
File dir = new File("/path/to/dir");
File[] htmlFiles = dir.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".html");
    }
});
if (htmlFiles != null) for (File html: htmlFiles) {
    ...
}
于 2012-08-18T10:39:28.737 に答える
1

次のようなものを実装する必要があります

public class Transformation {

  public static void main (String[] args){
    transformation(".", ".");
  }

  public static void transform(String inXML, String inXSL, String outTXT, String renamedFile){
    System.out.println(inXML);
    System.out.println(inXSL);
    System.out.println(outTXT);
    System.out.println(renamedFile);
  }

  public static void transformation(String inFolder, String outFolder){
    File infolder = new File(inFolder);
    File outfolder = new File(outFolder);
    if (infolder.isDirectory() && outfolder.isDirectory()){
      System.out.println("In " + infolder.getAbsolutePath());
      System.out.println("Out " + outfolder.getAbsolutePath());
      File[] listOfFiles = infolder.listFiles();
      String outPath = outfolder.getAbsolutePath();
      String inPath = infolder.getAbsolutePath();
      for (File f: listOfFiles) {
        if (f.isFile() ) {
          System.out.println("File " + f.getName());
          int indDot = f.getName().lastIndexOf(".");
          String name = f.getName().substring(0, indDot);
          String ext = f.getName().substring(indDot+1);
          if (ext != null && ext.equals("html")){
            transform(f.getAbsolutePath(), inPath+File.separator+name+".xsl", outPath+File.separator+name+".txt", outPath+File.separator+name+".html");

          }
        }
      }       
    }
  }
}
于 2012-08-18T09:39:46.330 に答える
1

inXML最初に、 、inXSLoutTXTおよびrenamedFileを引数として取るメソッドを作成する必要があります。

次に、最終的に を取得するクラスのlist()メソッドを使用して、変換するファイルを反復処理できます。FileFilenameFilter

のサンプルを次に示しますFilenameFilter

FilenameFilter filter = new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.contains("part");
    }
};

よろしく

于 2012-08-18T09:44:23.237 に答える
1

DirectoryScannerあなたの仕事をより簡単にするものを使用してください

Example of usage:

   String[] includes = {"**\*.html"};
   ds.setIncludes(includes);
   ds.setBasedir(new File("test"));
   ds.setCaseSensitive(true);
   ds.scan();

   System.out.println("FILES:");
   String[] files = ds.getIncludedFiles();
   for (int i = 0; i < files.length; i++) {
     System.out.println(files[i]);
   }

http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/DirectoryScanner.html

于 2012-08-18T09:57:12.970 に答える