我有一个写这样的XML文件的方法:
private void doProcess() {
Element rootElement = mDoc.createElement("Test");
mDoc.appendChild(rootElement);
....... I build the whole document here...
}
但是这个方法可以被多个线程调用,所以例如如果两个线程同时调用这个方法我得到一个
): org.w3c.dom.DOMException: Only one root element allowed
我已经用重入锁定尝试了它,但这不起作用...有人可以给我一个提示吗?
编辑:
我没有使用多个线程构建文档...我的方法的每次调用都构建了自己的文档...所以有时在我的应用程序中,我的方法将同时被调用两次......有我的问题...
答案 0 :(得分:2)
在你提出的问题中:
我没有使用多个线程构建文档...我的方法的每次调用都会构建自己的Doc
目前,给定的代码在函数的所有调用之间共享一个doc。为了让每个函数调用都在它自己的文档上工作,你需要修改代码,使每个调用都拥有它自己的文档。
这可以通过创建和返回新的文档对象来完成
private XMLDocument doProcess() {
XMLDocument mDoc = new XMLDocument(); // or simmilar depending on XML library
Element rootElement = mDoc.createElement("Test");
mDoc.appendChild(rootElement);
// ....... I build the whole document here...
return mDoc; //return the document object
}
或者,将文档对象作为参数传递
private void doProcess(XMLDocument mDoc) { ... }
答案 1 :(得分:1)
xml只能有一个root,所以这可能是你问题的答案。您可以在此方法之外实例化根元素,并在每次向方法内部添加元素。