2

我试图通过使用 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

4 回答 4

3

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

正在为file not found exception.

于 2015-03-12T05:41:52.333 回答
1

看来问题出在这里:

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

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

如果您碰巧更喜欢使用 URL 而不是使用文件名,请注意上述不是有效的 URL,因为/在所有平台上都要求 URL 使用正斜杠 ( )。

于 2012-11-24T21:06:40.037 回答
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");
于 2012-11-24T18:18:17.797 回答
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旧版本的直接写入Files似乎有问题。

@VGR 的想法似乎很接近。

需要注意的微妙点是file:\D:\...实际上应该读取file:/D:/...这是 xalan 早期版本的问题。

于 2014-07-16T11:23:10.003 回答