Use XSLT. É mais fácil. Eu anexei uma folha de estilos (merge.xsl) que resolve seu problema. O arquivo arquivos.xml contém:
<arquivos> <arquivo>um.xml</arquivo> <arquivo>dois.xml</arquivo> <arquivo>tres.xml</arquivo> </arquivos> Supondo que você tenha, no mesmo diretório, os arquivos um.xml, dois,xml e tres.xml o resultado será: <?xml version="1.0" encoding="iso-8859-1"?> <documentos> <aluno id="1"> <nome>x</nome> <idade>10</idade> </aluno> <aluno id="2"> <nome>y</nome> <idade>12</idade> </aluno> <aluno id="3"> <nome>z</nome> <idade>15</idade> </aluno> </documentos> Você pode inclui-lo no seu código usando as classes do pacote javax.xml.transform: // parser é objeto do tipo javax.xml.parsers.DocumentBuilder Source xmlSource = new DOMSource( parser.parse("arquivos.xml") ); Result result = new DOMResult( parser.newDocument() ); Source xslStyle = new StreamSource("merge.xsl"); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(xslStyle); t.transform(xmlSource, result); O objeto result agora contém a árvore DOM do documento resultado.xml anexo. (Esta solução foi adaptada de um exercício que passei aos alunos do último curso de XSLT que ministrei - só mudei os nomes dos tags para ficarem iguais ao seu problema). []s Helder -- Helder da Rocha ([EMAIL PROTECTED]) Web Consultant www.argonavis.com.br São Paulo, Brazil +55 (11) 3044 4398 +55 (11) 9291 0567 ----- Original Message ----- From: "Mauri Ferrandin" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, June 05, 2002 5:31 PM Subject: [java-list] XML, juntar Documentos ! > Seguinte : > > Tenho vários documentos XML armazenas em objetos da classe > > org.w3c.dom.Document do tipo: > > <doc01> > <aluno> > <nome>x</nome> > <idade>10</idade> > </aluno> > </doc01> > > e > > <doc02> > <aluno> > <nome>x</nome> > <idade>10</idade> > </aluno> > </doc02> > > e quero criar um documento integrado da seguinte forma : > > <documentos> > > <--Inserir aqui doc01 como nó filho do raiz documentos--> > <--Inserir aqui doc03 como nó filho do raiz documentos--> > <--Inserir aqui doc04 como nó filho do raiz documentos--> > ... > <--Inserir aqui docn como nó filho do raiz documentos--> > > </documentos> > > Alguém sabe se exiiste alguma API para XML que faça isto de maneira mais > fácil pois na API do Xerces, eu tenho que percorrer cada documento em > árvore lendo cada Node e gravando no documento final, isto é maior pedreira. > > Aguardo retorno ! > > T+ > > -- > > ============================================================================ =============================== > Professor Mauri Ferrandin - [EMAIL PROTECTED] Núcleo(Kernel) de Informática > UNERJ - Centro Universitário de Jaraguá do Sul - SC - Brazil > Linux registred user #121834 > > "Em política, é melhor não falar; se falar, é bom não dizer; se disser, é bom não escrever; > se escrever, convém não assinar; se assinar, assine com a mão errada." (Idalino Ribeiro) > > > > > > > > > > > ------------------------------ LISTA SOUJAVA ---------------------------- > http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP > dúvidas mais comuns: http://www.soujava.org.br/faq.htm > regras da lista: http://www.soujava.org.br/regras.htm > historico: http://www.mail-archive.com/java-list%40soujava.org.br > para sair da lista: envie email para [EMAIL PROTECTED] > ------------------------------------------------------------------------- >
<doc> <aluno id="3"> <nome>z</nome> <idade>15</idade> </aluno> </doc>
<doc> <aluno id="2"> <nome>y</nome> <idade>12</idade> </aluno> </doc>
<arquivos> <arquivo>um.xml</arquivo> <arquivo>dois.xml</arquivo> <arquivo>tres.xml</arquivo> </arquivos>
<doc> <aluno id="1"> <nome>x</nome> <idade>10</idade> </aluno> </doc>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output encoding="iso-8859-1" /> <!-- 1. Esta é a raiz do arquivo-fonte (arquivos.xml) --> <xsl:template match="/"> <documentos> <xsl:apply-templates /> </documentos> </xsl:template> <!-- 2. Seleciona cada nome em <arquivo> e passa para a função document("uri") que carrega o seu conteúdo, que por sua vez fica guardado na variável $documento. Depois, faz um apply-templates começando na raiz do documento importado --> <xsl:template match="arquivo"> <xsl:variable name="documento" select="document(.)" /> <xsl:apply-templates select="$documento" mode="unidade"/> </xsl:template> <!-- 3. Esta é a raiz de cada arquivo importado --> <xsl:template match="/" mode="unidade"> <xsl:apply-templates /> </xsl:template> <!-- 4. O elemento aluno e todo o seu conteúdo é copiado para o documento resultado --> <xsl:template match="aluno"> <xsl:copy-of select="." /> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="iso-8859-1"?> <documentos> <aluno id="1"> <nome>x</nome> <idade>10</idade> </aluno> <aluno id="2"> <nome>y</nome> <idade>12</idade> </aluno> <aluno id="3"> <nome>z</nome> <idade>15</idade> </aluno> </documentos>
------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------