dom4j 复制节点及其子节点

在生成复杂XML时,遇到主子表数据的问题,尝试通过读取模板并修改来避免大量手写代码。遇到子表多条数据时,需要复制节点及其子节点。初始尝试直接添加、clone和createCopy方法均未成功。深入dom4j源码后,发现可以通过设置父节点为null后再添加,再恢复父节点的方式来实现节点复制。这种方式成功解决了问题,但注意到dom4j的clone函数设计上不复制子节点,这可能是个潜在风险或设计选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

InitgPty.setParent(null)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值