Tem como unir 2 ou mais xmls em um?
Sendo que não queria criar arquivos, queria fazer tudo com objetos.
Unir XMLs
8 Respostas
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.
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?
A Commons Configuration é para lidar com configurações.
Pelo que estou imaginando, você precisa ler isto aqui:
Não estou vendo nada nessa biblioteca que sirva para criar um XML.
Qual API foi sugere, para que eu possa fazer essa união de XMLs?
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?
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.
Abraços.
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.
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.