JDOM - 克隆MULTIPLE元素 - 方法clone()未定义类型List

时间:2013-05-07 17:40:54

标签: java jdom

我最近问了一个问题,一位成员帮我解释了如何克隆一些元素并从一个元素中删除元素。但是当输入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()未定义

如何克隆多个元素?谢谢你提前!

1 个答案:

答案 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);

我已编辑代码以使用两个单独的数组来避免并发修改异常。