Unir XMLs

8 respostas
Jedi_FeniX

Tem como unir 2 ou mais xmls em um?
Sendo que não queria criar arquivos, queria fazer tudo com objetos.

8 Respostas

T

Hum - que tipo de união você quer fazer?

  • Pôr ambos os documentos sob o mesmo . Exemplo:

Documento 1:

Documento 2:

Resultado possível:

  • Supondo que o elemento root de ambos os documentos é o mesmo, pôr os tags filhos sob o mesmo root. Exemplo:
    Documento 1:

Documento 2:

Resultado possível:

Note que ambos os tipos de concatenação requerem apenas usar o DOM e lidar com eles, para criar um terceiro XML.

Jedi_FeniX

Eu gostaria de fazer a primeira situação que você falou.
Eu estou usando a API da Commons Configuration da Apache para trabalhar com XML, teria como fazer isso com esta API?

T

A Commons Configuration é para lidar com configurações.

Pelo que estou imaginando, você precisa ler isto aqui:

http://commons.apache.org/configuration/userguide/howto_compositeconfiguration.html#Composite_Configuration_Details

Não estou vendo nada nessa biblioteca que sirva para criar um XML.

Jedi_FeniX

Qual API foi sugere, para que eu possa fazer essa união de XMLs?

Jedi_FeniX

Fui fazer uma pesquisa depois de ler a especificação de Commons Configuration e agora estou usando DOM para tentar unir dois ou mais xmls.
Estou fazendo uns com as classe que a JVM oferece. O meu código está assim:

String xmlPath = "../xml/datasource.xml";
                        String xmlPath1 = "../xml/datasource1.xml";

                        File xslFile = new File(xslPath);

                        Document mainDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
                        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlPath);
                        Document document1 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlPath1);


                        Element mainElement = mainDocument.createElement("xmlPortal");
                        mainDocument.appendChild(mainElement);
                        
                        Node nodeTemp = mainDocument.importNode(document, true);

Quando o código chega na última linha eu recebo este erro:

Exception in thread "main" org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: The implementation does not support the requested type of object or operation. 
        at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1719)
        at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1487)
        at test.XSLToHTML.main(Unknown Source)

O que está acontecendo?

celso.martins

Cara, uma sugestão é usar a XStream. Gostei muito dessa joça.

Agrega uma/várias classe(s) Document numa classe Root e seja feliz.

http://xstream.codehaus.org/

Abraços.

Jedi_FeniX

Não entendi a sua sugestão, no final eu tenho que ter um objeto DOM, com os XMLs concatenados e não um objeto XStream.

celso.martins

Agora quem não entendeu fui eu. Você disse:

Bem, se você precisa de uma estrutura de objetos, esquece o o XStream e todos as outras APIs e trabalha apenas com os objetos agregados.

public class Root{
  private Document document; // A agregação
}

public class Document{
// Não sei o que você quer colocar aqui
}

Agora se precisa do XML, o XStream vai montar a estrutura para você. Não precisa gerar um arquivo. Pode usar a String (XML) em memória.

Agora se é obrigado a usar DOM, dá uma olhada aqui: http://www.guj.com.br/posts/list/2094.java

Abraços.

Criado 14 de agosto de 2008
Ultima resposta 15 de ago. de 2008
Respostas 8
Participantes 3