将 XSLT 应用于 XML 文件



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

我有一个包含XML文件的目录结构。我有一个XSLT 1.0,我正在所有这些文件上应用它,并为每个文件生成新的XML文件。我用JAVA编写了代码。但我的问题是我无法将输出文件放在与我从中获取输入 XML 文件的结构相同的单独输出文件夹中。例如,如果我有一个根目录 Home,其中包含两个文件夹文件夹 1 和文件夹 2。每个文件夹1和文件夹2都有数量的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));  
      }
   }  

那么谁能帮我如何指定生成的新文件的输出路径?另外,我如何生成与输入相同的目录格式的输出文件?

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

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

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

我从你的问题中得到的是,有两个文件夹文件夹1和文件夹2。文件夹 1 有一些 XML 文件,文件夹 2 有一些 XML 文件。让我们假设您已经获得了以文件夹 1 到 HTML 格式存在的所有 xml 文件的输出。现在,您希望这些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));  
          }
       } 

相关内容

  • 没有找到相关文章

最新更新