我试图通过使用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)
是否有人遇到此问题或有解决方案?请帮帮我!
答案 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。