我最近问了一个问题,一位成员帮我解释了如何克隆一些元素并从一个元素中删除元素。但是当输入XML中存在多个元素时,相同的方法无法使用(这不是重复的问题)。例如,如果我以这种格式输入XML(当然元素的数量总是不同):
<SyncMXAUTHCI>
<MXAUTHCISet>
<CI>
<CINAME>COMPUTER68</CINAME>
</CI>
</MXAUTHCISet>
</SyncMXAUTHCI>
并且想要拥有它的克隆
<SyncMXAUTHCI>
<MXAUTHCISet>
<CI>
<CINAME>COMPUTER68</CINAME>
</CI>
<CI>
<CINAME>COMPUTER68</CINAME>
</CI>
</MXAUTHCISet>
</SyncMXAUTHCI>
我将使用它并且它完美地运作:
Document erJdom = erData.getData();
Element root = erJdom.getRootElement();
Namespace erJdomNamespace = root.getNamespace();
Element incSet = root.getChild("MXAUTHCISet", erJdomNamespace);
incSet.addContent((Element)incSet.getChild("CI", erJdomNamespace).clone());
但是如果我在输入XML中有2个CI元素:
<SyncMXAUTHCI>
<MXAUTHCISet>
<CI>
<CINAME>COMPUTER68</CINAME>
</CI>
<CI>
<CINAME>COMPUTER100</CINAME>
</CI>
</MXAUTHCISet>
</SyncMXAUTHCI>
我用getChildren
尝试了这个,但它不会编译,因为:
incSet.addContent((Element)incSet.getChildren("CI", erJdomNamespace).clone());
然后它说类型List
的方法clone()未定义如何克隆多个元素?谢谢你提前!
答案 0 :(得分:0)
您无法在一次操作中克隆多个元素。你必须遍历每个元素,并单独克隆每个元素....(你应该使用JDOM 2.0.5!)
List<Element> toadd = new ArrayList<Element>();
foreach (Element e : incSet.getChildren("CI", erJdomNamespace)) {
toadd.addContent(e.clone());
}
incSet.addContent(toadd);
我已编辑代码以使用两个单独的数组来避免并发修改异常。