首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java(JAXP)和XSLT:覆盖XML文件

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

Stack Overflow用户
提问于 2012-08-03 20:28:53
回答 2查看 2.1K关注 0票数 1

我是以XML/HTML文件(temp.xml)和XSLT(temp.xsl)作为输入来生成XML文件的,我的输出是以新名称(temp_copy.xml)作为一个单独的文件生成的,但我希望覆盖输入XML文件,而不是创建新文件。我尝试给出与输入文件中相同的路径,但这不起作用。那么,实现这一目标的另一种方式是什么呢?提前谢谢。

我的代码

代码语言:javascript
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-08-03 21:33:05

“但这不起作用”需要更好地定义。你有错误吗?如果是的话,它是怎么说的?如果不是,发生了什么事情与你的预期相悖?

通常情况下,覆盖其输入的进程在读取完输入之前就有可能关闭它,除非它是专门设计来处理这种情况的。

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

票数 2
EN

Stack Overflow用户

发布于 2012-08-04 05:39:44

如果其他人也面临同样的问题,那就看看我按照拉什的建议做了什么,而且效果很好-

代码语言:javascript
复制
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");
    }

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11802840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档