Diferença de XML tolerante ao comprimento da linha


13

Analisei as respostas para essa pergunta e, infelizmente, nenhuma delas me ajudou até agora.

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

Estamos usando uma forma modificada de docbook, mas estou feliz o suficiente olhando a fonte XML bruta. Tudo bem até agora - exceto que, quando o editor de cópias faz uma alteração, isso pode alterar 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 verdadeira mudança aqui é a inserção de "grontle". Eu não me importo que o "baz" tenha mudado da primeira linha para a segunda linha, mas todas as ferramentas diff que eu já vi fazer.

Percebo que uma opção seria reformatar o documento inteiro (ou possivelmente apenas parágrafos inteiros) em linhas únicas ... mas isso é realmente difícil de ler, porque as ferramentas diff não envolvem quando estão sendo exibidas.

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

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

Respostas:


9

Parece que o SourceGear DiffMerge fornecerá isso a você, com seu suporte ao conjunto de regras para XML (e muitas outras linguagens). Não tenho certeza se isso resolverá todos os seus problemas, porque o exemplo é obviamente uma simplificação do programa atual. Tentei alterações um pouco mais complexas, e essas parecem funcionar bem também.

Veja a amostra abaixo para o diff que você descreveu

diff simples


11
Acabei de dar uma olhada rápida nos arquivos reais e parece que ele funciona perfeitamente. Obrigado tão muito!
Jon Jonke

4

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

Então começamos vendo o problema.

insira a descrição da imagem aqui

O BC possui uma função especial de análise XML: (já possui função XML, mas não com pré-análise - que é Ordenada e Arrumada )

insira a descrição da imagem aqui

então vamos a http://www.scootersoftware.com/download.php?zz=kb_moreformats_alt

insira a descrição da imagem aqui

e agora -

insira a descrição da imagem aqui

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

ps Se o texto nas imagens for muito pequeno, basta clicar na imagem para carregar as originais.


Aliás, o que significa " Namir.78 "?
Pacerier


0

Eu tive esse mesmo problema em uma empresa há pouco tempo. Eles queriam encontrar uma verdadeira "diferença de XML" e não parece haver soluções completas por aí.

A solução mais fácil é executar um script de impressão bonita no XML primeiro para normalizar os finais de linha e espaçamento e, em seguida, executar a ferramenta diff de escolha (o WinMerge é bom para o Windows). Isso elimina grande parte do flotsam que a maioria dos difftools lhe lançará do XML, e é realmente fácil criar um script.


O problema é que o XML já é bem impresso e eficaz - são as inserções e exclusões que mudam onde as linhas são quebradas. Gostaria de saber se eu preciso de algo para reformatar um arquivo baseado nas palavras que ocorrem nas extremidades das linhas em outro :(
Jon Skeet

0

O SD Smart Differencer compara documentos com base na estrutura, em oposição ao layout real.

Existe um XML Smart Differencer. Para XML, isso significa ordem de correspondência de tags e conteúdo. Observe que a sequência de texto no fragmento específico que você indicou era diferente. (Atualmente, ele não entende a noção XML do texto em que o espaço em branco é normalizado versus significativo, mas suspeito que isso não o prejudique muito).


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.