Diferença de XML tolerante a comprimento de linha

13

Eu olhei as respostas para esta pergunta , e infelizmente nenhum deles me ajudou até agora.

Para não falar sobre o assunto, a segunda edição do C # in Depth está agora em edição de cópia. Quero poder ver o que o editor de texto fez com facilidade, para que eu possa rejeitar ou aceitar as alterações dele.

Estamos usando uma forma modificada de docbook, mas fico feliz em ver a fonte XML bruta. Tudo bem até agora - exceto que quando o editor de cópia faz uma alteração, isso pode mudar a quebra de linha. Então, algo que costumava ler:

<para>Foo bar baz
 second line</para>

agora lê

<para>Foo bar grontle
 baz second line</para>

Agora a alteração real aqui é a inserção de "grontle". Eu não me importo que o "baz" tenha passado da primeira linha para a segunda linha, mas todas as ferramentas de comparação que vi fazem.

Eu percebo que uma opção seria reformatar todo o documento (ou possivelmente apenas parágrafos inteiros) em linhas simples ... mas isso é realmente muito difícil de ler, porque as ferramentas de diferenciação não envolvem quando estão sendo exibidas. / p>

Tenho certeza de que posso gerenciar as ferramentas que tenho, mas se alguém souber de algo melhor, ficarei muito feliz em saber disso. Eu suspeito que meus editores também.

(Eu incluí a tag do Windows aqui porque eu realmente preciso que ela esteja disponível no Windows. Eu gostaria de ouvir sobre qualquer software que não seja Windows também, mas apenas no caso de Eu poderia ajudar a construí-lo no Windows.

    
por Jon Skeet 08.04.2010 / 21:57

6 respostas

9

Parece que o SourceGear DiffMerge lhe dará isso, com seu suporte a regras para XML (e muitos outros idiomas). Não tenho certeza se isso consertará todos os seus problemas, porque o exemplo é, obviamente, uma simplificação do programa atual. Eu tentei mudanças um pouco mais complexas, e elas parecem funcionar bem também.

Veja o exemplo abaixo para o diff que você descreveu

    
por 09.04.2010 / 00:34
4

Minha solução é com além de comparar . (uma ferramenta muito mais poderosa)

Então, começamos vendo o problema.

BCtemumpapelespecialdeanálisedeXML:(elejátemumpapelXML,masnãocompré-análise-queéOrdenadoeTidiado)

entãovamosparao link

eagora-

espero que você o use para a próxima edição do C # em profundidade

p.s. se o texto nas fotos for muito pequeno, basta clicar na foto para carregar as originais.

    
por 21.12.2012 / 10:11
1

Sou o autor de uma ferramenta de comparação de XML (software comercial) que deve fazer o trabalho (e mais alguns recursos). Existe uma versão de teste (que é limitada a arquivos Xml de 100 KBs no máximo) para download aqui:

link

Uma breve introdução também está disponível aqui:

link

    
por 18.02.2011 / 15:49
0

Eu tive esse mesmo problema em uma empresa não muito tempo atrás. Eles queriam encontrar um verdadeiro "XML diferem", e não parece haver nenhuma solução completa por aí.

A solução mais fácil é executar um script de impressão bonita no XML primeiro para normalizar as terminações de linha e o espaçamento e, em seguida, execute a ferramenta diff de escolha ( WinMerge é bom para windows). Isso elimina muitos dos flotsam que a maioria dos difftools lançará em você a partir do XML, e é realmente fácil construir um script em volta.

    
por 08.04.2010 / 22:23
0

O SD Smart Differencer compara documentos baseados em estrutura em oposição ao layout real.

Existe um Diferenciador Inteligente XML. Para XML, isso significa corresponder a ordem das tags e do conteúdo. Deve-se notar que a string de texto no fragmento específico que você indicou era diferente. (Atualmente, ele não entende a noção XML de texto em que o espaço em branco é normalizado versus significativo, mas suspeito que isso não vai prejudicá-lo muito).

    
por 23.05.2010 / 06:58
0

@Jon Skeet: Você mencionou na sua pergunta que as ferramentas de comparação não são quebradas quando são exibidas.
vimdiff (também disponível no Windows via gvim ) permite que você envolva os arquivos xml exibidos com :window set wrap . Link de referência .
Além disso, você pode executar :diffupdate para atualizar os diffs.

    
por 08.08.2012 / 16:35