(一)移除节点及属性
输出结果为:
1。正确的删除了类型为society的book节点<?xml version="1.0" encoding="UTF-8"?><root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name><sex>boy</sex></author></root>2。这样是不能删除sex节点的<?xml version="1.0" encoding="UTF-8"?><root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name><sex>boy</sex></author></root>3。这样就可以正确删除sex节点<?xml version="1.0" encoding="UTF-8"?><root><book type="science"><Name>Java</Name><price>100</price></book><author><name>chb</name></author></root>4。正确删除book节点的type属性<?xml version="1.0" encoding="UTF-8"?><root><book><Name>Java</Name><price>100</price></book><author><name>chb</name></author></root>
分析:
第二个输出结果不能删除sex节点,我们需要看dom4j的API
public boolean remove(Element element)
Element
Node.detach()
element
从中我们可以看出,remove只能用在它自己的直接孩子节点上,不能用在孙子节点上,因为sex节点不是root节点的直接孩子节点,所以不能删除;而sex节点却是author节点的直接孩子节点,所以第三个输出可以删除。
(二)将两个Document合并为一个Document
先看一个错误的情况
(1)使用add()方法添加
调用CombineDocument函数,会出现以下错误:
org.dom4j.IllegalAddException: The node "org.dom4j.tree.DefaultElement@17bd6a1 [Element: <author attributes: []/>]" could not be added to the element "root" because: The Node already has an existing parent of "root" at org.dom4j.tree.AbstractElement.addNode(AbstractElement.java:1521) at org.dom4j.tree.AbstractElement.add(AbstractElement.java:1002) at xml_chb.dom4j_chb.CombineDocument(dom4j_chb.java:189) at xml_chb.dom4j_chb.main(dom4j_chb.java:199)Exception in thread "main"
即提示author节点已经有一个root节点了,不能再添加到另一个节点上去。
(2)使用appendContent()方法
即将doc_book.getRootElement().add(author);
改为:doc_book.getRootElement().appendContent(author);
<?xml version="1.0" encoding="UTF-8"?><root><book type="science"><Name>Java</Name><price>100</price></book><book type="society"><Name>Society security</Name><price>130</price></book><name>chb</name><sex>boy</sex></root>
可以看出,缺少了author节点,只是把author节点的子节点添加上去了,但是由此可见,appendContent方法是有希望的。
我们看一下dom4j的API:
public void appendContent(Branch branch)
Collection.addAll(java.util.Collection)
branch
(3)使用正确的appendContent方法
将:Element author=(Element)doc_author.selectSingleNode("//author");
doc_book.getRootElement().appendContent(author);
改为:doc_book.getRootElement().appendContent(doc_author.getRootElement());
输出:
<?xml version="1.0" encoding="UTF-8"?><root><book type="science"><Name>Java</Name><price>100</price></book><book type="society"><Name>Society security</Name><price>130</price></book><author><name>chb</name><sex>boy</sex></author></root>
是正确结果
(4)另一种可行的方法