dom4j 复制节点及其子节点

主子表数据,生成一个比较复杂的xml,子表可能有多条数据,由于标签很多,有几百个,所以手写代码,太复杂而且写完可读性不强,也不方便维护。所以想到读取一个模板,然后通过末尾标签的name来setText的方式生成,然而有个问题就是子表多条时,怎么复制一份子表的tree来,然后set值(模板里肯定只能维护一个子表的tree)。首先试了直接add(element)的方法,因为有父节点所以报错了,然后试了clone和craetcopy,但是只能复制自己不能复制字节点,上网搜了下,也是不行只能复制自己,而且clone后,自己的子节点也没有了,唯一靠谱点的方案,就是递归一层层复制,但是看到递归本能是抗拒的,可以做为打底方案,所以还是想尝试下,于是debug,dom4j源码看看,果然找到了方案。

add(element)报错是因为有父节点了,然后看到clone的源码里有setParent(null),茅塞顿开,先setnull然后add,然后再set回来不就行了?
在这里插入图片描述

InitgPty.setParent(null);
GrpHdr.add(InitgPty);
InitgPty.setParent(GrpHdr);

果然成功,但不知道为什么,dom4jclone的函数,不让复制子节点,源码里是有意把子节点clear了,所这样操作会不会带来风险,犹未可知,如果是dom4j有意不让复制子节点的话,那这发现就是一个bug了。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/guaizang/article/details/113163692