我需要找到一种更简单有效的方法将JDOM元素(以及所有它的剪裁节点)转换为Document
。 ownerDocument( )
无法正常工作,因为这是版本JDOM 1
。
此外,使用以下代码时会发生org.jdom.IllegalAddException: The Content already has an existing parent "root"
异常。
DocumentBuilderFactory dbFac = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFac.newDocumentBuilder();
Document doc = null;
Element elementInfo = getElementFromDB();
doc = new Document(elementInfo);
XMLOutputter xmlOutput = new XMLOutputter();
byte[] byteInfo= xmlOutput.outputString(elementInfo).getBytes("UTF-8");
String stringInfo = new String(byteInfo);
doc = dBuilder.parse(stringInfo);
答案 0 :(得分:1)
我认为你必须使用元素的以下方法。
Document doc = <element>.getDocument();
返回此父级拥有文档,如果包含此父级的分支当前未附加到文档,则返回null。
答案 1 :(得分:0)
JDOM内容一次只能有一个父级,并且必须先将其从一个父级中分离,然后才能将其附加到另一个父级。这段代码:
Document doc = null; Element elementInfo = getElementFromDB(); doc = new Document(elementInfo);
如果该代码失败,那是因为getElementFromDB()
方法返回的元素是其他结构的一部分。你需要分离&#39;它:
Element elementInfo = getElementFromDB();
elementInfo.detach();
Document doc = new Document(elementInfo);
好的,这解决了IllegalAddException
另一方面,如果您只想获取包含该元素的文档节点,JDOM 1.1.3允许您使用getDocument
执行此操作:
Document doc = elementInfo.getDocument();
请注意,doc可能为null。
要获得最重要的元素,请尝试:
Element top = elementInfo;
while (top.getParentElement() != null) {
top = top.getParentElement();
}
在您的情况下,您从数据库获取的elementInfo
是一个名为&#39; root&#39;的元素的子项,类似于:
<root>
<elementInfo> ........ </elementInfo>
</root>
这就是为什么你得到你所做的信息,用&#34; root&#34;在其中:
The Content already has an existing parent "root"