在DOM中使用clondNode()方法更改复制的元素时,是否会更改元素副本?

时间:2012-10-29 15:07:06

标签: java dom

当我使用DOM将java对象序列化为xml文件时,我在尝试复制元素时遇到了问题。

我想生成两个xml文件,第一个只包含一个子元素,第二个包含两个子元素(实际上是元素的副本)。

因此,xml文件应为:

1.xml
<fruit>
    <apple name="XXX"/>
</fruit>

2.xml
<fruit>
    <apple name="XXX"/>
    <apple name="XXX"/>
</fruit> 

我使用名为“times”的变量一次生成两个文件来控制。我的代码是这样的:     public void static main(String [] args){         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();         DocumentBuilder docBuilder = factory.newDocumentBuilder();         文档doc = docBuilder.newDocument();

    // create the fruit element
    Element fruit = doc.createElement("fruit");
    doc.appendChild(fruit);

    int times = 2;

    Element fruitCopy = (Element)fruit.cloneChild(true);
    for(int i=1; i<=times; i++) {
        fruit = createApples(doc, fruitCopy, i);
        System.out.println(fruitCopy.getChildNodes().getLength());
        // write the output xml file
        ......
    }
}

public Element static createApples(Document doc, Element fruit, int noOfCopies)  {
    for(int j=0; j < noOfCopies; j++) {
        // create apple element
        Element apple = doc.createElement("apple");  
        apple.setAttribute("name",Apple.getName());
        // set other attributes
        ....

        fruit.appendChild(apple);
    }

    return fruit;
}

打印行的输出为:

0
2

但是我希望fruitCopy在将它传递给createApple方法时一直是空的.....因此,我想要的打印行的输出应该是:

0
0

我搜索了DOM API,它说clondNode()方法将从克隆的不可变元素创建一个可变元素。那么这意味着只要原来的“水果”被修改,那么“fruitCopy”也是如此?

谢谢!!!!!

0 个答案:

没有答案