importNode抛出org.w3c.dom.DOMException:NOT_SUPPORTED_ERR

时间:2013-10-12 17:09:38

标签: java xml dom saxon

我正在尝试将两个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 BTW同样的事情发生):

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)

在谷歌搜索之后我看到old messages撒克逊显然创建了一个只读的DOM,这很奇怪,因为我认为DOM与SAX的比较点之一是DOM是读写而SAX是只读的。

1 个答案:

答案 0 :(得分:1)

要使用Saxon合并两个文档(我不确定你的意思,但我猜),你不想想用DOM来摆弄它。只需运行此XQuery:

<doc>{doc('a.xml'), doc('b.xml')}</doc>