在没有DocumentBuilderFactory或DocumentBuilder的情况下将JDom 1.1.3元素转换为Document

时间:2015-04-01 06:21:29

标签: java xml jdom

我需要找到一种更简单有效的方法将JDOM元素(以及所有它的剪裁节点)转换为DocumentownerDocument( )无法正常工作,因为这是版本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);

2 个答案:

答案 0 :(得分:1)

我认为你必须使用元素的以下方法。

Document doc = <element>.getDocument();

参考API documentation它说

返回此父级拥有文档,如果包含此父级的分支当前未附加到文档,则返回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"