【问题标题】:Applying XSLT onto XML files [duplicate]将 XSLT 应用于 XML 文件 [重复]
【发布时间】:2025-12-09 22:15:01
【问题描述】:

可能重复:
Applying XSLT v. 2 on XML

我有一个包含 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));  
      }
   }  

那么任何人都可以帮助我如何指定生成的新文件的输出路径吗?还有如何生成与输入目录格式相同的输出文件?

【问题讨论】:

  • 你应该edit你原来的问题,而不是作为一个新问题再次重新发布。
  • 我想,这不是重复的。

标签: java xml xslt-1.0 xslt-2.0


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我从您的问题中得到的是,有两个文件夹 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));  
              }
           } 
    
    

    【讨论】: