2013-05-07 65 views
0

我最近问了一个问题,一位成员帮助我了解了如何克隆某个元素并从一个元素中移除元素。但是当输入XML中有多个元素时,不能使用相同的方法(这不是重复的问题)。在举例来说,如果我有输入XML这种格式(元素当然数量总是不同):JDOM - 克隆MULTIPLE元素 - clone()方法未定义类型列表

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

和whant有其克隆

<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()是未定义的类型列表

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

回答

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

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

+0

再次感谢您的努力和时间。我从eclipse中导入了一些jdom.jar(这是一些IBM Tivoli Maximo应用程序)。你是否告诉我这不适合我的JDOM.JAR?我应该下载一些包含2.0.5类的jdom.jar文件吗?我的代码出现错误:元素无法解析为变量 – 2013-05-07 18:24:20

+0

如何使用JDOM 2.0.5?如果这是解决方案? – 2013-05-07 18:24:44

+0

我下载了jdom2-2.0.5.jar文件,但现在我的整个班级都有错误。在eclipse中,我将它添加到ADD EXTERNAL JAR中。我添加了import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.Namespace;因为这些是路径,但它不会编译。还错误仍然是“foreach(元素e:incidentSet.getChildren(”CI“,erJdomNamespace))” – 2013-05-07 18:55:39