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]
-------------------------------------------------------------------------

Responder a