我通过将XML / HTML文件(temp.xml)和XSLT(temp.xsl)作为输入生成XML文件,我的输出生成为具有新名称(temp_copy.xml)的单独文件但我想要覆盖输入XML文件而不是创建新文件。我尝试给出与输入文件中相同的路径,但这不起作用。那么实现这一目标的另一种方法是什么呢? 提前谢谢。
我的Java代码:
public class SimpleXSLT {
public static void main(String[] args) {
String inXML = "C:/tmp/temp.xml";
String inXSL = "C:/tmp/temp.xsl";
String outTXT = "C:/tmp/temp_copy.xml";
SimpleXSLT st = new SimpleXSLT();
try {
st.transform(inXML,inXSL,outTXT);
} catch(TransformerConfigurationException e) {
System.err.println("Invalid factory configuration");
System.err.println(e);
} catch(TransformerException e) {
System.err.println("Error during transformation");
System.err.println(e);
}
}
public void transform(String inXML,String inXSL,String outTXT)
throws TransformerConfigurationException,
TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inXSL);
Transformer transformer = factory.newTransformer(xslStream);
transformer.setErrorListener(new MyErrorListener());
StreamSource in = new StreamSource(inXML);
StreamResult out = new StreamResult(outTXT);
transformer.transform(in,out);
System.out.println("The generated XML file is:" + outTXT);
}
}
答案 0 :(得分:2)
“但这不起作用”需要更好地定义。你有错误吗?如果是这样,它说了什么?如果没有,发生了什么违背了你的期望?
通常,覆盖输入的进程在完成读取之前就有可能破坏输入,除非它专门设计为能够处理这种情况。
最简单的解决方案是写入单独的输出文件,然后在转换完成后,删除或移动/重命名输入文件,并将输出文件移动/重命名为输入文件。
答案 1 :(得分:1)
如果其他人面临同样的问题,请按照LarsH的建议看看我做了什么,并且它完美无缺 -
public static void main(String[] args) {
String inXML = "C:/tmp/text.xml";
String inXSL = "C:/tmp/text.xsl";
String outTXT = "C:/tmp/text_copy_copy.xml";
String renamedFile = "C:/tmp/text.xml";
File oldfile =new File(outTXT);
File newfile =new File(renamedFile);
SimpleXSLT st = new SimpleXSLT();
try {
//TRANSFORMATION CODE
}
try{
File file = new File(inXML);
if(file.delete()){
System.out.println("Deleted!");
}else{
System.out.println("Failed.");
}
}catch(Exception e){
e.printStackTrace();
}
if(oldfile.renameTo(newfile)){
System.out.println("Renamed");
}else{
System.out.println("Rename failed");
}
}