将字符串解析为XML文档jdom2

时间:2014-08-25 10:06:01

标签: java xml jdom

我有问题。我想将字符串转换为xml文档。 但是这段代码是抛出异常:

  

线程“main”中的异常java.lang.ClassCastException:com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl无法强制转换为org.jdom2.Document           在ru.unicus.osp.Test.main(Test.java:17)

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.jdom2.Document;
import org.xml.sax.InputSource;

public class Test {
    public static void main(String[] args) throws Exception {
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader("<root><node1></node1></root>"));
        Document doc = (Document) db.parse(is);
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你在这里混合了两个库。最简单的方法是从以下位置更改导入:

import org.jdom2.Document;

import org.w3c.dom.Document;

因此代码应如下所示:

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class Test {
   public static void main(String[] args) throws Exception {
       DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
       InputSource is = new InputSource();
       is.setCharacterStream(new StringReader("<root><node1></node1></root>"));
       Document doc = (Document) db.parse(is);  
   }
}

答案 1 :(得分:1)

您在这里混合了两个库,DOM和JDOM。

您的当前输出Document似乎是一个JDOM文档,但是您正在尝试将w3 DOM Document实例转换为一个,并且您失败了。

如果您想将JDOM文档作为输出,那么您的代码应该是:

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new StringReader("<root><node1></node1></root>"));

对于DOM文档输出,只需使用DOM文档(org.w3c.dom.Document)而不是org.jdom2.Document