0

最近質問したところ、あるメンバーが要素を複製する方法と、1 つの要素からのみ要素を削除する方法を教えてくれました。ただし、入力 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());

次に、メソッド clone() はタイプ List に対して未定義です

複数の要素を複製する方法は? 前もって感謝します!

4

1 に答える 1

0

1 回の操作で複数の要素を複製することはできません。各要素をループし、それぞれを個別に複製する必要があります.... (そして、JDOM 2.0.5 を使用する必要があります!)

List<Element> toadd = new ArrayList<Element>();
foreach (Element e : incSet.getChildren("CI", erJdomNamespace)) {
  toadd.addContent(e.clone());
}
incSet.addContent(toadd);

同時変更例外を回避するために、2 つの別個の配列を使用するようにコードを編集しました。

于 2013-05-07T17:48:33.193 に答える