Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(JAXP)和XSLT:覆盖XML文件_Java_Xml_Xslt_Jaxp - Fatal编程技术网

Java(JAXP)和XSLT:覆盖XML文件

Java(JAXP)和XSLT:覆盖XML文件,java,xml,xslt,jaxp,Java,Xml,Xslt,Jaxp,我通过将XML/HTML文件(temp.XML)和XSLT(temp.xsl)作为输入生成XML文件,并且我的输出作为一个单独的文件生成,并使用新名称(temp_copy.XML),但我希望覆盖输入XML文件,而不是创建一个新文件。我试图给出与输入文件中相同的路径,但没有成功。那么,实现这一目标的另一种方法是什么呢? 提前谢谢 我的Java代码: public class SimpleXSLT { public static void main(String[] args) {

我通过将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);
    }
}
“但那没用”需要更好地定义。你有错误吗?如果是,它说了什么?如果没有,发生了什么与你的预期相反的事情

通常情况下,覆盖其输入的进程在完成读取之前有可能会对输入进行重击,除非它是专门为处理这种情况而设计的


最简单的解决方案是写入一个单独的输出文件,然后在转换完成后,删除或移动/重命名输入文件,并将输出文件移动/重命名为输入文件以前的样子。

如果其他人也面临同样的问题,请看一看我根据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");
    }

    }

谢谢你的回复。当我使用相同的路径时,它会显示以下异常和错误:javax.xml.transform.TransformerException:javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.wrappedruntimeeException:文件过早结束。错误:文件过早结束。目前我正在执行与您所说的相同的操作,即移动文件,但根据我的项目要求,不移动文件会更好。重命名该文件听起来不错。我删除了原始文件,然后用原始文件的名称重命名了新生成的文件,它成功了。谢谢你的建议。:)