-1

我有 XML:

<SyncMXAUTHCI>
  <MXAUTHCISet>
    <CI>
      <CINAME>COMPUTER68</CINAME>
      <CIRELATION>INSTALLED</CIRELATION>
    </CI>
  </MXAUTHCISet>
</SyncMXAUTHCI>

我想要 MXAUTHCISet 的重复内容。结果将是:

<SyncMXAUTHCI>
  <MXAUTHCISet>
    <CI>
      <CINAME>COMPUTER68</CINAME>
    </CI>
    <CI>
      <CINAME>COMPUTER68</CINAME>
      <CIRELATION>INSTALLED</CIRELATION>
    </CI>
  </MXAUTHCISet>
</SyncMXAUTHCI>

怎么做?我尝试使用 .addContent、.setContnet 方法但没有成功。如何实现这一目标?谢谢

更新:我采用这种形式的元素:

Document erJdom = erData.getData();
Element root = erJdom.getRootElement();
Namespace erJdomNamespace = root.getNamespace();

Element incidentSet = root.getChild("MXAUTHCISet", erJdomNamespace);

Element incident=incidentSet.getChild("CI", erJdomNamespace);

那工作还行。但是当我尝试时:

Element incident=incidentSet.getChild("CI", erJdomNamespace);
Element ci2=new Element("CI");
ci2.addContent(incident);

所以你可以看到我尝试获取元素内容并将其放入具有相同内容的新元素中,我将添加到 MXAUTHSet

所以它甚至没有到达我想要添加新元素的部分:

incidentSet.addContent(ci2);
4

2 回答 2

2

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

对您来说最简单的事情是使用 clone() 方法创建一个未附加的副本。

在你的情况下:

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

(如果您使用的是 JDOM 2.0.x,则 clone() 方法将返回一个 Element... 并且 (Element) 情况将是不必要的)

于 2013-05-07T14:13:55.127 回答
0

您必须将重复元素添加到列表中,然后使用 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));
于 2013-05-07T13:57:20.323 回答