本文主要是介绍jdom整个拷贝第三方传入的Element,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[/code]今天在读取xml将里面内容拷贝到另一Document的时候出现下列问题:
要将以下return下内容
[code="java"]
<?xml version='1.0' encoding='GB18030'?>
<RETURN>
<RetCode>响应码</RetCode>
<RetMsg>响应码说明</RetMsg>
<TrDate>处理日期</TrDate>
<BatNo>批次号</BatNo>
<Stat>处理状态</Stat>
<TrStat>交易状态</TrStat>
<BatStatDes>批次状态说明</BatStatDes>
</RETURN>
拷贝到以下body中
<?xml version="1.0" encoding='GB18030'?>
<TranData>
<Head />
<Body>
<RetCode>响应码</RetCode>
<RetMsg>响应码说明</RetMsg>
<TrDate>处理日期</TrDate>
<BatNo>批次号</BatNo>
<Stat>处理状态</Stat>
<TrStat>交易状态</TrStat>
<BatStatDes>批次状态说明</BatStatDes>
</Body>
</TranData>
用了
Element mOutBodyEle = new Element("Body");
mOutBodyEle.addContent(reDoc.getRootElement());
但是报了如下错误
Exception in thread "main" org.jdom.IllegalAddException: The element "RETURN" could not be added as the root of the document: The Content already has an existing parent document
at org.jdom.ContentList.add(ContentList.java:205)
at org.jdom.ContentList.add(ContentList.java:131)
at java.util.AbstractList.add(AbstractList.java:89)
at org.jdom.Element.addContent(Element.java:811)
at com.guohr.net.CallWebsvcByFinance.batchStatusQuery(CallWebsvcByFinance.java:71)
at com.guohr.net.CallWebsvcByFinance.main(CallWebsvcByFinance.java:131)
后来网上有人说用detach()方法,但是我用了之后拷贝的个数丢失了,后来采用了clone()方法后解决了这个问题,看来人家设计的时候都考虑好了,真的很强大啊
mOutBodyEle.addContent(reDoc.getRootElement().detach());
for (int i = 0; i < reDoc.getRootElement().getContentSize(); i++) {
mOutBodyEle.addContent((Element)(reDoc.getRootElement().getContent(i).clone()));
}
这篇关于jdom整个拷贝第三方传入的Element的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!