可能的重复项:
在 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));
}
}