Java JDOM重复元素

Java JDOM重复元素,java,jdom,Java,Jdom,我有XML: <SyncMXAUTHCI> <MXAUTHCISet> <CI> <CINAME>COMPUTER68</CINAME> <CIRELATION>INSTALLED</CIRELATION> </CI> </MXAUTHCISet> </SyncMXAUTHCI> 那没问题。 但当我尝试时: Element in

我有XML:

<SyncMXAUTHCI>
  <MXAUTHCISet>
    <CI>
      <CINAME>COMPUTER68</CINAME>
      <CIRELATION>INSTALLED</CIRELATION>
    </CI>
  </MXAUTHCISet>
</SyncMXAUTHCI>
那没问题。 但当我尝试时:

Element incident=incidentSet.getChild("CI", erJdomNamespace);
Element ci2=new Element("CI");
ci2.addContent(incident);
所以您可以看到,我尝试获取元素内容,并将其放入新元素中,其内容与我将添加到MXAUTHSet上的内容相同 我得到的错误是: 该内容已经有一个现有的父级“mxautciset”

因此,我甚至不想在这里添加新的元素:

incidentSet.addContent(ci2);

必须将重复元素添加到列表中,然后使用addContent将列表添加到结构中的正确位置

    Document d = new Document();
    Element r = new Element("SyncMXAUTHCI");

    d.setRootElement(r);

    Element e = new Element("MXAUTHCISet");
    r.addContent(e);

    Element ae1 = new Element("CI");
    Element ae2 = new Element("CI");

    Element e2 = new Element("CINAME");
    e2.setText("COMPUTER68");
    ae1.setContent(e2);

    Element e3 = new Element("CINAME");
    e3.setText("COMPUTER68");
    ae2.setContent(e3);

    List l = new ArrayList();
    l.add(ae1);
    l.add(ae2);

    e.addContent(l);

    System.out.println(new XMLOutputter().outputString(d));

如果任何JDOM内容已附加到元素,则不能向该元素添加该内容

最简单的方法是使用clone()方法创建一个未连接的副本

就你而言:

incidentSet.addContent((Element)incidentSet.getChild("CI", erJdomNamespace).clone());

(如果您使用的是JDOM 2.0.x,那么clone()方法将返回一个元素……而(元素)的大小写将是不必要的)

您实际使用的是JDOM(Java的特定XML处理库)吗?向我们展示您当前拥有的代码,我们可以提供帮助。好的,这是我尝试过的,但我发现错误您只需要将ci2添加到incidentSet
incidentSet.addContent(ci2)
nevermind,添加答案。我在这里的评论是错误的。我做了那个意外设置。addContent(ci2);但我的类在代码的这一部分之前抛出了错误谢谢你的回答,但这并不是我的意思:XML来自某个外部系统,我必须读取它有多少CI元素,然后复制这些元素及其值。在示例中,我有1个元素,但在示例5中,我每次都可以有1个元素,所以我想用它们的值为CICan复制它们(让它们有10个),请帮助我如何实现这一点?非常感谢。所以元素的数量和它们的值是动态的,每一次不同,这实际上不是解决方案,因为值和元素的数量总是动态的。你能帮帮我吗?在我的更新中查看我尝试的内容这看起来很有希望。但我的JDOM返回一个对象。这就是问题所在吗?解决方法是什么?“type元素中的addContent(String)方法不适用于参数(Object)”,如果您的JDOM返回Object,那么您使用的是JDOM 1.x版本。这很好,但不是很好。如果升级到JDOM 2.x,可以避免将对象强制转换为元素。我将编辑答案,并在其中添加一个cast。我正在向服务器发送新类。我会把我得到的结果还给你。我希望它现在能起作用,这很好,它能起作用。我能再问你一件事吗(真的很抱歉)。我之所以这么做,是因为我想删除第一个CI中的某些元素,但要将其保留在第二个CI中。可能吗?您可以看到CIRELATION元素。我是否可以保留第一个元素的内容并将其放在第二个元素中,然后删除CIRELATION元素?您可以在更新中看到它的外观。真的很抱歉,你帮了我很多!!
    Document d = new Document();
    Element r = new Element("SyncMXAUTHCI");

    d.setRootElement(r);

    Element e = new Element("MXAUTHCISet");
    r.addContent(e);

    Element ae1 = new Element("CI");
    Element ae2 = new Element("CI");

    Element e2 = new Element("CINAME");
    e2.setText("COMPUTER68");
    ae1.setContent(e2);

    Element e3 = new Element("CINAME");
    e3.setText("COMPUTER68");
    ae2.setContent(e3);

    List l = new ArrayList();
    l.add(ae1);
    l.add(ae2);

    e.addContent(l);

    System.out.println(new XMLOutputter().outputString(d));
incidentSet.addContent((Element)incidentSet.getChild("CI", erJdomNamespace).clone());