none
Comparar arquivos XML RRS feed

  • Pergunta

  • Estou com dois arquivos XML e quero comparar este dois e vê se tem alguma diferença entre ambos e mostrar uma mensagem para o usuário, dizendo quais campos estão "idênticos". Ex:

    <catalogo>
      <recurso>
        <chave>wms_configuracao_recarga</chave>
        <nome>WMS - Configuração de Recarga</nome>
        <tabela>wms_configuracao_recarga</tabela>
        <heranca>padrao_log</heranca>    
        <propriedade>
          <chave>tipo</chave>
          <nome>Tipo</nome>
          <coluna>tipo</coluna>
          <tipo>string</tipo>
          <tamanho>15</tamanho>
          <obrigatorio>sim</obrigatorio>
          <dominio>
            <item>
              <chave>recarga_bateria</chave>
              <nome>Recarga de Bateria</nome>
            </item>
            <item>
              <chave>troca_bateria</chave>
              <nome>Troca de Bateria</nome>
            </item>
          </dominio>
          <pesquisa>pesquisarDominio()</pesquisa>
        </propriedade>
        <propriedade>
          <chave>tempo_dias</chave>
          <nome>Tempo em Dias</nome>
          <coluna>tempo_dias</coluna>
          <tipo>int</tipo>
          <obrigatorio>sim</obrigatorio>
        </propriedade>
      </recurso>
      <recurso>
        <chave>config_custo_empresa_coligada</chave>
        <nome>Configurações de Custos - Empresa Coligada</nome>
        <tabela>config_custo_empresa_coligada</tabela>
        <heranca>padrao_log</heranca>
        <propriedade>
          <chave>config_custo</chave>
          <nome>Configurações de Custos</nome>
          <coluna>config_custo</coluna>
          <tipo>int</tipo>
          <referencia>config_custo</referencia>
          <pesquisa>pesquisarReferencia()</pesquisa>
          <obrigatorio>sim</obrigatorio>
        </propriedade>
        <propriedade>
          <chave>empresa_coligada</chave>
          <nome>Empresa Coligada</nome>
          <coluna>empresa_coligada</coluna>
          <tipo>int</tipo>
          <referencia>empresa</referencia>
          <pesquisa>pesquisarReferencia()</pesquisa>
          <pesquisa_validacao>nivel_arvore='i'</pesquisa_validacao>
        </propriedade>
      </recurso>
    </catalogo>

    Tenho este arquivo e outro do mesmo tipo, e quero saber se existe alguma "propriedade" ou "recurso" diferente do original. Como eu posso proceder? Segue o código:

    namespace PrimeDataBuilder
    {
        public partial class Main : Form
        {
            public Main()
            {
                InitializeComponent();
            }

            private void btnSource_Click(object sender, EventArgs e)
            {
                OpenFileDialog dialogBox = new OpenFileDialog();
                if (dialogBox.ShowDialog() == DialogResult.OK)
                {
                    txbOriginalFile.Text = dialogBox.FileName;
                }
            }

            private void btnTarget_Click(object sender, EventArgs e)
            {
                OpenFileDialog dialogBox = new OpenFileDialog();
                if (dialogBox.ShowDialog() == DialogResult.OK)
                {
                    txbCompareWith.Text = dialogBox.FileName;
                }
            }

            private void btnCompare_Click(object sender, EventArgs e)
            {
                if (txbOriginalFile.Text == null || txbOriginalFile.Text == string.Empty)
                {
                    MessageBox.Show("Nenhum arquivo selecionado, por favor selecione um arquivo original");
                    return;
                }

                if (!File.Exists(txbOriginalFile.Text))
                {
                    MessageBox.Show("O arquivo original não existe, por favor selecione outro arquivo");
                    return;
                }

                if (txbCompareWith.Text == null || txbCompareWith.Text == string.Empty)
                {
                    MessageBox.Show("Nenhum arquivo de original, por favor selecione um arquivo para se comparado.");
                    return;
                }

                if (!File.Exists(txbCompareWith.Text))
                {
                    MessageBox.Show("O arquivo a ser comparado não existe, por favor selecione outro arquivo");
                    return;
                }

                DoCompare(txbOriginalFile.Text, txbCompareWith.Text);
            }

            public void DoCompare(string originalFile, string CompareWithFile)
            {          
                catalogo originalCatalogo = Catalogo.carregarCatalogo(originalFile);
                catalogo novoCatalogo = Catalogo.carregarCatalogo(CompareWithFile);
                
                foreach (catalogoRecurso catReq in originalCatalogo.Items)
                { 
                    catalogoRecurso cat = novoCatalogo.Items.Where(x => x.chave == catReq.chave).FirstOrDefault();

                    originalFile = txbOriginalFile.Text;
                    XElement xml = XElement.Load(originalFile);
                    txbResult.Text = xml.ToString();

                    if (!xml.Equals(txbResult.Text))
                    {
                        MessageBox.Show("O catalogo de comparação tem propriedades que não existem no catalogo original.");
                    }
                }
                //obtem todos os recursos q contém diferenças
                List<catalogoRecurso> recursosDivergentes = originalCatalogo.Items.Where(x => !novoCatalogo.Items.Equals(x)).ToList();
            }

            private void btnScript_Click(object sender, EventArgs e)
            {
                DoScript(txbOriginalFile.Text, txbCompareWith.Text);
            }

            private void DoScript(string originalFile, string CompareWithFile)
            {
                catalogo originalCatalogo = Catalogo.carregarCatalogo(originalFile);
                catalogo novoCatalogo = Catalogo.carregarCatalogo(CompareWithFile);

                try
                {
                    originalFile = txbOriginalFile.Text;
                    XElement xml = XElement.Load(originalFile);
                    txbResult.Text = xml.ToString();

                    MessageBox.Show("scripts gerado com sucesso.");
                    string catalogo = string.Empty;

                    if (txbOriginalFile.Text != txbCompareWith.Text || !(txbOriginalFile.Text != null))
                    {
                        catalogo = txbOriginalFile.ToString() + txbCompareWith.ToString();
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
    }

    terça-feira, 17 de dezembro de 2013 19:31

Todas as Respostas