Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Проблема с XML


Автор: Mikkie 21.3.2006, 02:29
Подскажите кто-нибудь почему не работает этот пример :

Код

import java.io.*;

public  class MyClass{
    public void  createFile(String a, String b) throws IOException {
           FileWriter out = new FileWriter("test.xml");                 
           org.apache.xerces.dom.DocumentImpl doc = new org.apache.xerces.dom.DocumentImpl();
           org.w3c.dom.Element text = doc.createElement("text");
           text.appendChild(doc.createTextNode(a));
           doc.appendChild(text);
           org.w3c.dom.Element numb = doc.createElement("text2");          
           numb.appendChild(doc.createTextNode(b));
           //*****************************************
            doc.appendChild(numb);          
           //***************************************
            org.apache.xml.serialize.OutputFormat format = new org.apache.xml.serialize.OutputFormat(doc, "windows-1251", true );
            format.setIndenting(true);
            org.apache.xml.serialize.DOMSerializer serealizer = new org.apache.xml.serialize.XMLSerializer(out,format);
            serealizer.serialize(doc);
            out.close();             
    }

    public static void main (String [] args) throws IOException {
    MyClass  m = new MyClass();
    m.createFile("bla-bla-bla","bbbbb");
    }
    
    
}


Проблема как я понял в выделенной строчке....
Он компилируется но при запуске выдает:

Код

Exception in thread "main" org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An a
ttempt was made to insert a node where it is not permitted.
        at org.apache.xerces.dom.CoreDocumentImpl.insertBefore(Unknown Source)
        at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
        at transfer.xml.Transfer.createFile(Transfer.java:19)
        at transfer.xml.Transfer.main(Transfer.java:30)
Press any key to continue...

Автор: tux 21.3.2006, 03:00
Дело в том, что XML-документ может иметь только один корневой элемент. В выделенной строчке ты пытаешься добавить к документу второй. Вот так все работает:
Код

import java.io.FileWriter;
import java.io.IOException;

import org.apache.xml.serialize.DOMSerializer;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Element;

public class MyClass {
    public void createFile(String a, String b) throws IOException {
        FileWriter out = new FileWriter("test.xml");
        org.apache.xerces.dom.DocumentImpl doc = new org.apache.xerces.dom.DocumentImpl();
        Element root = doc.createElement("test");
        doc.appendChild(root);
        Element text = doc.createElement("text");
        text.appendChild(doc.createTextNode(a));
        root.appendChild(text);
        Element numb = doc.createElement("text2");
        numb.appendChild(doc.createTextNode(b));
        root.appendChild(numb);
        OutputFormat format = new org.apache.xml.serialize.OutputFormat(
                doc, "windows-1251", true);
        format.setIndenting(true);
        DOMSerializer serealizer = new XMLSerializer(
                out, format);
        serealizer.serialize(doc);
        out.close();
    }

    public static void main(String[] args) throws IOException {
        MyClass m = new MyClass();
        m.createFile("bla-bla-bla", "bbbbb");
    }

}

Автор: Mikkie 21.3.2006, 03:36
tux,
Спасибо ! =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)