0

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

如何克隆多个元素?先感谢您!

4

1 回答 1

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

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

于 2013-05-07T17:48:33.193 回答