转换时找不到XML文件

时间:2012-11-24 17:28:18

标签: java xml dom

我试图通过使用DOM修改xml文件,这发生了:

javax.xml.transform.TransformerException: java.io.FileNotFoundException: file:\D:\myproject\build\web\xml\myFile.xml (The filename, directory name, or volume label syntax is incorrect)
        at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:263)
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:296)
        at utils.UpdateUtils.BookUpdate(UpdateUtils.java:36)

这是我的代码

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Document doc = db.parse(f);
        searchAndModify(doc); //modify xml's contents

        Source source = new DOMSource(doc);
        Result result = new StreamResult(f);
        TransformerFactory tff = TransformerFactory.newInstance();
        Transformer trans = tff.newTransformer();
        trans.transform(source, result);

f是我的xml,已生成。它解析为Document doc就好了。但是,在转换时,会抛出异常。

我试图解析一个新的xml,相同的文件夹,但无济于事:

Result result = new StreamResult(new File(path, "newFile.xml"));

javax.xml.transform.TransformerException: java.io.FileNotFoundException: file:\D:\myProject\build\web\newFile.xml (The filename, directory name, or volume label syntax is incorrect)

是否有人遇到此问题或有解决方案?请帮帮我!

4 个答案:

答案 0 :(得分:2)

StreamResult result = new StreamResult(new File(filepath).getAbsolutePath());

适用于file not found exception

答案 1 :(得分:1)

问题出现在这里:

java.io.FileNotFoundException: file:\D:\myProject\build\web\newFile.xml

在我看来,您的文件名以六个字符file:\开头。 确保您的文件名以D:开头。

如果您更喜欢使用URL而不是文件名,请注意这一点 以上不是有效的URL,因为URL需要使用forward 在所有平台上斜杠(/)。

答案 2 :(得分:0)

您应该为xml文件提供正确的文件路径。您似乎正在尝试访问Web应用程序中的文件,因此您可以在web.xml中指定应用程序资源路径

<context-param>
  <param-name>xmlPath</param-name>
  <param-value>D:\somefolder\</param-value>
</context-param>

然后使用

String xmlFilePath = new File(e.getServletContext().getInitParameter("xmlPath"));
File customerDataFile = new File(xmlFilePath , "newFile.xml");

答案 3 :(得分:0)

我遇到了同样的问题,我相信我知道它是什么。

对我来说,我有:

  // Make a string stream out of the xml.
  Source source = new StreamSource(new ByteArrayInputStream(xml.toString().getBytes("UTF-8")));
  FileOutputStream stream = new FileOutputStream(file);
  StreamResult result = new StreamResult(stream);
  transformer.transform(source, result);
  stream.close();

工作正常

然后用

打磨了这个
  // Make a string stream out of the xml.
  Source source = new StreamSource(new ByteArrayInputStream(xml.toString().getBytes("UTF-8")));
  // Transform it straight into the output file.
  StreamResult result = new StreamResult(file);
  transformer.transform(source, result);

在我的开发机器上也运行良好。

不幸的是,当我在网站上安装它时,它就破了。结果发现,网站上xalan的版本比我的测试设置更旧。看来旧版本的xalan在直接写入File时遇到了问题。

似乎@ VGR&#39; s idea已接近。

要注意的细微之处是文件:\ D:\ ... 应该实际读取文件:/ D:/ ... 这是问题所在早期版本的xalan。