用jdom向一个element添加element出错!!org.jdom.IllegalAddException:

sparkcn 2005-09-19 10:21:00
对于如下的xml
<?xml version="1.0" encoding="GBK"?>
<bookList>
<book>
<name>Java编程入门</name>
<author>张三</author>
<publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
</bookList>

我想再添加一个
<book>
<name>Java编程入门</name>
<author>张三</author>
<publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
可是却抱错误:
错误!org.jdom.IllegalAddException: The elemen
t "book" could not be added as the root of the document: The Content already has
an existing parent document

我的代码是:
===========================得到要被添加的element==========================
org.jdom.input.SAXBuilder sb=new org.jdom.input.SAXBuilder();
//创建文档
org.jdom.Document doc=sb.build(new FileInputStream("c:\\example.xml"));
//获得这个文档得跟元素
org.jdom.Element el=doc.getRootElement();
//获得这个跟元素,的所有子元素
========================================================================
org.jdom.Element elTempObject=el.getChild("book");


el.addContent(elTempObject);//这句话就抱错!!!!


请问各位大哥怎么解决?
...全文
515 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdop 2005-09-19
  • 打赏
  • 举报
回复
我认为应该给新节点重新分配空间,clone另一个book对象,然后再 add
而不是直接把现有节点的引用 elTempObject 直接 add

xml被jdom引擎在内存中解析,产生了一系列的"对象树",java机区别对象的途径是hash码.
如果获取一个对象的引用:
org.jdom.Element elTempObject=el.getChild("book");
然后又再次添加到dom结构:
el.addContent(elTempObject); // elTempObject引用的对象已经存在,hash码是冲突的
对象树无法确认这个操作
xdop 2005-09-19
  • 打赏
  • 举报
回复
btw:

The exception text is 'org.jdom.IllegalAddException: The element "book" could not be added as the root of the document: The Content already has an existing parent document'

Therefore,u cannot assign a couple of parents to an element.
一、JDOM 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。 JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。 JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。 这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,JAVA程序员在使用时来用起来总觉得不太方便。 DOM的缺点主要是来自于由于Dom是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为JAVA特别设计的。JDOM的最新版本为JDOM Beta 9。最近JDOM被收录到JSR-102内,这标志着JDOM成为了JAVA平台组成的一部分。 二、JDOM 包概览 JDOM是由以下几个包组成的 org.jdom 包含了所有的xml文档要素的java类 org.jdom.adapters 包含了与dom适配的java类 org.jdom.filter 包含了xml文档的过滤器类 org.jdom.input 包含了读取xml文档的类 org.jdom.output 包含了写入xml文档的类 org.jdom.transform 包含了将jdom xml文档接口转换为其他xml文档接口 org.jdom.xpath 包含了对xml文档xpath操作的类三、JDOM 类说明 1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类 JDOMSource JDOMResult org.JDOM.input 3、输入类,一般用于文档的创建工作 SAXBuilder DOMBuilder ResultSetBuilder org.JDOM.output 4、输出类,用于文档转换输出 XMLOutputter SAXOutputter DomOutputter JTreeOutputter 使用前注意事项: .........

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧