0

重複の可能性:
XML に XSLT v. 2 を適用する

XML ファイルを含むディレクトリ構造があります。これらすべてのファイルに適用し、それぞれに新しい XML ファイルを生成する XSLT 1.0 があります。JAVAでコードを書いていました。しかし、私の問題は、入力 XML ファイルの取得元と同じ構造を持つ別の出力フォルダーに出力ファイルを配置できないことです。たとえば、Folder1 と Folder2 の 2 つのフォルダを持つルート ディレクトリ Home があるとします。各 Folder1 & Folder2 には、多数の XML ファイルがあります。したがって、これらのフォルダーにある XML ファイルを変換すると、生成された出力ファイルは同じ構造を持つ別のフォルダーに移動する必要があります。

Javaコードは次のとおりです。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XMLwithXSLT {
  public static void main(String[] args) throws FileNotFoundException,    
    TransformerConfigurationException, TransformerException {

  File dir = new File("Input Directory Root Path Here");
  listFilesInDirectory(dir);
 }


 public  static void listFilesInDirectory(File dir) throws FileNotFoundException,     
       TransformerException {

   File[] files = dir.listFiles();
   if (files != null) {
     for (File f : files) {
       if (f.isDirectory()) {
         System.out.println(f.getName());
         listFilesInDirectory(f);
        } else {
        System.out.println(f.getName());
        OutputXml(f);

    }
   }
 }


    public static void OutputXml(File in) throws FileNotFoundException, 
    TransformerException{

     TransformerFactory tFactory = TransformerFactory.newInstance();
     Source xslDoc = new StreamSource("backup.xslt");
     Source xmlDoc = new StreamSource(in.getPath()) ; 
     System.out.print(in.getName() + "/n");
     String outputFileName =  in.getName();
     System.out.print(outputFileName );
     OutputStream htmlFile;
            htmlFile = new FileOutputStream(outputFileName);

     Transformer transformer = tFactory.newTransformer(xslDoc);
     transformer.transform(xmlDoc, new StreamResult(htmlFile));  
      }
   }  

生成された新しいファイルの出力パスを指定する方法として、誰かが私を助けることができますか? また、入力と同じディレクトリ形式で出力ファイルを生成するにはどうすればよいですか?

4

2 に答える 2

0

出力ディレクトリにパスを追加する必要があります。例えば:

String outputFileName = "c:\\tmp\\xmloutput\\" + in.getName();

基本的に、入力ファイルをループして、サブディレクトリとファイル名を引き継ぎます。出力ディレクトリに存在するかどうかを確認し、存在しない場合は作成します。zo の場合は、このように outputFileName に名前を付けます。

于 2013-01-30T08:16:45.447 に答える
0

あなたの質問から得たのは、Folder1とFolder2の2つのフォルダーがあるということです。Folder1 には XML ファイルがあり、Folder2 には XML ファイルがあります。Folder1 に存在するすべての xml ファイルの出力を HTML 形式に取得したとします。そして、これらの HTML ファイルを、システム内のどこかにある Folder1 という名前のフォルダー (またはシステムの一時フォルダーを考えてみましょう) に配置し、Folder2 に存在するすべての XML ファイルについても同じようにします。

この種の出力が必要な場合は、コードを次のように更新します



    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class XMLwithXSLT {
      static String pathRequiredForFile=null;
      static String tempfolder=System.getProperty("java.io.tmpdir");
      public static void main(String[] args) throws FileNotFoundException,    
        TransformerConfigurationException, TransformerException {

      File dir = new File("Input Directory Root Path Here");
      listFilesInDirectory(dir);
     }
     public  static void listFilesInDirectory(File dir) throws FileNotFoundException,     
           TransformerException {

       File[] files = dir.listFiles();


       if (files != null) {
         for (File f : files) {
           if (f.isDirectory()) {
               pathRequiredForFile=f.getName();

             listFilesInDirectory(f);

            } else {
            System.out.println(f.getName());
            File path=new File(tempfolder+"//"+pathRequiredForFile);
            path.mkdir();
            OutputXml(f,path.getAbsolutePath());

        }
       }
     }
     }
        public static void OutputXml(File in,String saveFileInPath) throws FileNotFoundException, 
        TransformerException{

        TransformerFactory tFactory = TransformerFactory.newInstance();
        Source xslDoc = new StreamSource("backup.xslt");
        Source xmlDoc = new StreamSource(in.getPath()) ; 
        System.out.print(in.getName() + "/n");
         String outputFileName = in.getName().split("\\.")[0];
         System.out.println(outputFileName );
         OutputStream htmlFile;
                htmlFile = new FileOutputStream(saveFileInPath+"//"+outputFileName+".html");

         Transformer transformer = tFactory.newTransformer(xslDoc);
         transformer.transform(xmlDoc, new StreamResult(htmlFile));  
          }
       } 

于 2013-01-30T08:13:17.053 に答える