我正在尝试将两个 XML 文档与标准 Oracle JDK 7 和 Saxon HE 合并,但我不断得到:
org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: The implementation does not support the requested type of object or operation.`
与以下内容一致(顺便说一句importNode
,同样的事情发生):adoptNode
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class FooMain {
private static Document slurp(String s) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
return factory.newDocumentBuilder().parse(new ByteArrayInputStream(s.getBytes("UTF-8")));
}
public static void main(String args[]) throws Exception {
Document doc = slurp("<a></a>");
Document doc2 = slurp("<b></b>");
Node not_used = doc.importNode(doc2, true);
}
}
我在我的类路径上都试过了Saxon-HE-9.4.jar
,但我仍然得到同样的错误。
更新
根据我收到的评论,当我尝试:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance("net.sf.saxon.dom.DocumentBuilderFactoryImpl", null);
我得到了:
java.lang.UnsupportedOperationException: The Saxon DOM implementation cannot be updated
at net.sf.saxon.dom.NodeOverNodeInfo.disallowUpdate(NodeOverNodeInfo.java:719)
at net.sf.saxon.dom.DocumentOverNodeInfo.importNode(DocumentOverNodeInfo.java:211)
at FooMain.main(FooMain.java:16)
谷歌搜索后,我看到旧消息表明 Saxon 显然创建了一个只读 DOM,这很奇怪,因为我认为 DOM 与 SAX 的比较点之一是 DOM 是可读写的,而 SAX 是只读的。