Comparador de XML: diferenças entre dois arquivos XML

Cole dois arquivos XML e veja, nó por nó, quais tags, atributos e textos foram adicionados, removidos ou modificados entre as duas versões.

Comparar dois arquivos XML: pareamento de nós e leitura

O comparador lê os dois documentos com o parser XML do navegador e depois compara as árvores nó a nó: nome da tag, atributos (qualquer que seja a ordem) e texto direto de cada elemento. Os elementos que têm um atributo id são pareados por esse identificador, os demais pela posição. Cada nó aparece como adicionado, removido, modificado ou inalterado.

Como a ferramenta pareia os elementos

Os dois textos precisam, antes de tudo, ser XML bem formados: caso contrário, a ferramenta exibe um erro de análise e não compara nada. Depois, para cada elemento:

  • os filhos que têm um atributo id são pareados pelo valor desse id, mesmo que a ordem tenha mudado;
  • os filhos sem id são pareados pela posição (o 1º com o 1º, o 2º com o 2º);
  • um elemento é “modificado” se um atributo for adicionado, removido ou alterado, ou se o seu texto direto for diferente. O texto é aparado: a indentação e as quebras de linha não contam.

Exemplo com os arquivos de demonstração

Versão 1: raiz com version = 1.0, um bloco settings em que theme vale dark, dois user (id 1 Alice, id 2 Bob com o papel Admin). Versão 2: version = 1.1, theme vale light, uma tag notifications a mais, Bob passa a SuperAdmin e aparece um user id 3 (Charlie). Resultado: 3 nós modificados (a raiz pelo seu atributo, theme, role de Bob), 4 nós adicionados (notifications, user 3 e seus dois filhos) e 3 removidos (user 1 com name e email). O user 2 permanece inalterado em si, mas contém uma modificação.

Limites que você precisa conhecer

  • Se dois elementos da mesma posição não têm o mesmo nome de tag, ou têm ids diferentes, o novo é marcado como modificado e todos os seus filhos como adicionados; os filhos antigos não são listados como removidos.
  • Apenas os nós de texto são lidos: seções CDATA, comentários e instruções de processamento não são comparados. O prefixo do namespace faz parte do nome comparado.
  • Em uma lista sem id, um elemento inserido no início desloca todos os seguintes, que aparecem como modificados. A visão de código, um diff linha a linha do editor Monaco, ajuda então a ler a mudança.

No modo direto, a comparação é refeita 0,8 segundo após a última tecla digitada. A árvore recolhe os ramos sem mudança, e os arquivos carregados são lidos no navegador, sem envio.

Perguntas frequentes

A ordem dos atributos ou a indentação contam como diferença?

Não. Os atributos são comparados como um conjunto, depois de ordenar os nomes, e o texto de cada elemento é aparado: a indentação e as quebras de linha entre tags são ignoradas. Em contrapartida, um valor de atributo que muda, mesmo em um único caractere, marca o elemento como modificado.

Como comparar uma lista de elementos cuja ordem mudou?

Dê a cada elemento um atributo chamado exatamente id: a ferramenta os pareia então pelo identificador, qualquer que seja a posição. Sem id, o pareamento é feito pela posição, e um elemento inserido no início faz todos os seguintes aparecerem como modificados. Outros nomes de atributo (key, ref, code) não são usados para o pareamento.

Por que a ferramenta exibe “Erro de análise XML”?

Pelo menos um dos dois documentos não está bem formado: tag não fechada, caractere & sem escape, vários elementos raiz ou declaração mal posicionada. Enquanto os dois textos não passarem pelo parser do navegador, nenhuma comparação é iniciada. O botão de formatação não ajuda aqui, pois não corrige a sintaxe.

As seções CDATA e os comentários são comparados?

Não na visão em árvore: ela lê apenas os nós de texto diretos de cada elemento, além dos atributos. Uma modificação limitada a um comentário ou a uma seção CDATA não aparece ali. A visão de código, que compara o texto bruto linha a linha, a mostra.

A ferramenta é realmente gratuita?

Sim, todas as ferramentas do Kristools são 100% gratuitas e acessíveis sem cadastro.

Meus dados estão protegidos?

Sim. Todo o processamento é feito diretamente e com segurança no seu navegador. Nenhum dado pessoal é enviado para os nossos servidores.