我在将XML文档类型转换为Document对象时遇到问题。 这是一段代码
Document doc=null;
doc = (Document) parser.parse(sourceFile);
对于第2行,它会抛出java classcast异常..
没有类型转换,它显示错误为
Type mismatch: cannot convert from org.w3c.dom.Document to javax.swing.text.Document
我现在如何正确地进行类型转换?任何建议??
答案 0 :(得分:6)
问题在于,不合格的名称存在冲突。
也就是说,由于您的import
语句,非限定名称Document
指的是javax.swing.text.Document
,但您确实需要org.w3c.dom.Document
代替(这就是解析器返回)。
您可以使用完全限定名称来解决此问题:
org.w3c.dom.Document doc = (org.w3c.dom.Document) parser.parse(sourceFile);
或者,您还可以具体import
具体Document
,如下所示:
import javax.swing.text.*;
import org.w3c.dom.*;
import org.w3c.dom.Document;
//...
Document doc = (Document) parser.parse(sourceFile);
这称为单一类型导入声明(JLS 7.5.1),它可用于“隐藏”其他声明。
答案 1 :(得分:2)
这两个接口具有相同的名称,但完全不相关。你不能在它们之间施放 - 它没有意义,因为它们代表完全不同的概念(好的,理论上,你可以有一个显示XML树的Swing组件并使用DOM Document作为它的模型,但我不认为那是什么你有)。
您可能想要做的是获取未解析的XML并在要显示它的swing组件上调用setText(xmlText)
。
答案 2 :(得分:1)
您的应用程序是否为Swing应用程序?
您可能正在使用IDE,您可以自动组织源文件中的导入。 IDE为javax.swing.text.Document
而不是org.w3c.dom.Document
添加了导入。这是我在使用Eclipse IDE时经常遇到的事情。
您需要做的事情:从源代码文件的顶部删除此行:
import javax.swing.text.Document;
将其替换为:
import org.w3c.dom.Document;