0

可能的重复:
在 XML 上应用 XSLT v. 2

我有一个带有 XML 文件的目录结构。我有一个 XSLT 1.0,我将其应用于所有这些文件并为每个文件生成新的 XML 文件。我用 JAVA 写过代码。但我的问题是我无法将输出文件放在一个单独的输出文件夹中,该文件夹的结构与我从中获取输入 XML 文件的文件夹相同。例如,如果我有一个根目录 Home,其中包含两个文件夹 Folder1 和 Folder2。每个 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

我从您的问题中得到的是,有两个文件夹 Folder1 和 Folder2。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 回答
0

您应该将路径添加到输出目录。例如:

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

所以基本上,循环输入文件并接管子目录和文件名。查看它是否存在于您的输出目录中,如果不存在则创建它。如果是 zo,则以这种方式命名您的 outputFileName。

于 2013-01-30T08:16:45.447 回答