Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将节点导入到新文档中_Java_Domdocument - Fatal编程技术网

Java 将节点导入到新文档中

Java 将节点导入到新文档中,java,domdocument,Java,Domdocument,我试图将一个节点从一个基本文档导入到一个新文档中,但是当我使用document.importNode()方法时,它会生成一个异常。有趣的是,这个异常不包含消息,所以除了堆栈跟踪之外,我几乎是瞎的。(我是java新手) 以下是我创建新文档并导入节点的方法: this.Builder=DocumentBuilder this.Element=节点 代码: 和堆栈跟踪: 02-06 14:27:53.328: W/System.err(9082): org.w3c.dom.DOMException

我试图将一个节点从一个基本文档导入到一个新文档中,但是当我使用document.importNode()方法时,它会生成一个异常。有趣的是,这个异常不包含消息,所以除了堆栈跟踪之外,我几乎是瞎的。(我是java新手)

以下是我创建新文档并导入节点的方法:

  • this.Builder=DocumentBuilder
  • this.Element=节点
代码:

和堆栈跟踪:

02-06 14:27:53.328: W/System.err(9082): org.w3c.dom.DOMException
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.NodeImpl.setNameNS(NodeImpl.java:227)
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.ElementImpl.(ElementImpl.java:50)
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.DocumentImpl.createElementNS(DocumentImpl.java:336)
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.DocumentImpl.shallowCopy(DocumentImpl.java:156)
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.DocumentImpl.cloneOrImportNode(DocumentImpl.java:208)
02-06 14:27:53.328: W/System.err(9082):     at org.apache.harmony.xml.dom.DocumentImpl.importNode(DocumentImpl.java:222)
02-06 14:27:53.328: W/System.err(9082):     at com.xxxx.xxxx.XMLSelection.extract(XMLSelection.java:57)

尝试使用
cloneNode
后跟
adoptNode
将子元素用作新
文档的根元素

    String xml = "<hello><world /></hello>";
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Document document0 = db.parse(new InputSource(new StringReader(xml)));
        Document document1 = db.newDocument();


        NodeList nodeList = document0.getDocumentElement().getChildNodes();
        document1.appendChild(document1.adoptNode(nodeList.item(0).cloneNode(true)));

        // Serialize the two documents to check that the copy was correct.
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(document0), new StreamResult(output));
        System.out.println(output.toString("UTF-8"));

        output.reset();
        transformer.transform(new DOMSource(document1), new StreamResult(output));
        System.out.println(output.toString("UTF-8"));
    } catch (TransformerException e) {
    } catch (IOException e) {
    } catch (SAXException e) {
    } catch (ParserConfigurationException e) {
    }
stringxml=”“;
试一试{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
DocumentDocument0=db.parse(新的InputSource(新的StringReader(xml));
documentdocument1=db.newDocument();
NodeList NodeList=document0.getDocumentElement().getChildNodes();
document1.appendChild(document1.adoptNode(nodeList.item(0)、cloneNode(true));
//序列化两个文档以检查副本是否正确。
ByteArrayOutputStream输出=新建ByteArrayOutputStream();
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(新的DOMSource(document0),新的StreamResult(output));
System.out.println(output.toString(“UTF-8”);
output.reset();
transform(新的DOMSource(document1),新的StreamResult(output));
System.out.println(output.toString(“UTF-8”);
}捕获(转换异常e){
}捕获(IOE异常){
}捕获(SAXE异常){
}捕获(ParserConfiguration异常e){
}

嗯,抛出DomeException是因为元素(或子元素)缺少限定名。您可以转储导致此错误的XML吗?我正在尝试基于标记创建一个新文档。以下是xml:当使用eclipse时,Document.adoptNode()是未定义的。(导入org.w3c.dom.Document;)。我应该使用另外一个软件包吗?嗯,你的目标是什么版本的Android?如果我不记得完全错了的话,adoptNode是API级别8.sdk7(Android 2.1)。我应该升级SDK还是有解决方法?8之前API级别的XML非常糟糕,2.1版本的XML相当小,我想升级,但这取决于您的需求。快速提问,新文档不是工厂提供的“真实”文档吗?我已经将API设置为8,现在定义了adoptNode方法,但仍然会出现相同的错误。我最好的猜测是,您示例中的“document01”无效,我的方法也无效?我的意图不是输出此文档,而是基于节点列表创建一个新对象(XMLSelection)。也许我创建新文档的方法没有得到优化。我仍然希望使用选择(节点)访问getElementsByTagName方法。
    String xml = "<hello><world /></hello>";
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Document document0 = db.parse(new InputSource(new StringReader(xml)));
        Document document1 = db.newDocument();


        NodeList nodeList = document0.getDocumentElement().getChildNodes();
        document1.appendChild(document1.adoptNode(nodeList.item(0).cloneNode(true)));

        // Serialize the two documents to check that the copy was correct.
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(document0), new StreamResult(output));
        System.out.println(output.toString("UTF-8"));

        output.reset();
        transformer.transform(new DOMSource(document1), new StreamResult(output));
        System.out.println(output.toString("UTF-8"));
    } catch (TransformerException e) {
    } catch (IOException e) {
    } catch (SAXException e) {
    } catch (ParserConfigurationException e) {
    }