EXEMPLO: SAX Win32 AppWizard cria um aplicativo de SAX Visual C++

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 276505
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Em vez de usar o DOM (Document Object Model), você pode usar a API simples para XML (SAX) para fornecer uma API de nível inferior para analisar dados XML que podem resultar em um ganho de desempenho muito maior em determinados cenários. Por exemplo, um sistema de mensagens cenário em que você pré-processar e redirecionar documentos XML para outros servidores.

SAX foi originalmente definido como um conjunto de APIs de Java. O analisador Microsoft XML (MSXML) versão 3.0 mapeia as interfaces de Java para COM interfaces e em julho de 2000 Web liberar ou nas versões posteriores do nosso analisador, SAX suporte é fornecido para programação com o Microsoft Visual C++ e o Microsoft Visual Basic. Para documentação do kit (SDK) de desenvolvimento de software relacionados, consulte a seguinte site da Microsoft Developer Network (MSDN): Juntamente com o desempenho ganho, programação em SAX pode exigir algum trabalho extra de desenvolvedores. Para ajudar a programação em SAX com o Visual C++, este artigo contém AppWizard de Win32 SAX, com um programa de exemplo que foi criado usando este assistente.

Observação Como com outros códigos de exemplo, o SAX Win32 Appwizard é fornecido como um auxílio para os desenvolvedores; no entanto, não há nenhum plano de suporte para esta ferramenta.
Mais Informações
O seguinte arquivo está disponível para download no Centro de download da Microsoft:
O arquivo SAXAppWizard.exe contém os seguintes arquivos:

Nome de arquivoTamanho
SAXAppWizard.awx116 KB
a1.dsw1 KB
a1.DSP2 KB
a1.cpp5 KB
a1ContentHandler.h2 KB
a1ContentHandler.cpp3 KB
SAXContentHandlerImpl.h3 KB
SAXContentHandlerImpl.cpp4 KB
StdAfx.h2 KB
StdAfx.cpp1 KB
Stock.XML1 KB

Como as interfaces de SAX estão implementadas no AppWizard

Abordagens diferentes estão disponíveis para implementar uma interface COM. O AppWizard usa a instrução a seguir para gerar definições de classe abstrata para cada interface SAX:
#import "msxml3.dll?" raw_interfaces_only				
Observação Embora isso é a maneira correta para gerar todas as classes wrapper para implementar a interface COM, às vezes é desejável usar a interface DOM com SAX, para interceptar todos os erros COM como exceções do C++ e para obter todos os benefícios de _variant_t e _bstr_t. Nesse caso, você pode usar a seguinte combinação em vez disso:
#import <msxml3.dll> exclude("IErrorInfo") high_method_prefix("_") raw_method_prefix("")				
como possam ser somente de seu interesse na manipulação de determinados eventos são definidos pela interface, não é necessário implementar todos os métodos na interface. No entanto, todas as funções que são definidas nas interfaces de SAX (como ISAXContentHandler ) são funções virtuais puras. Para resolver esse problema, o AppWizard gera uma classe de wrapper meio (por exemplo, SAXContentHandlerImpl ) que estende a interface SAX e encapsula todas as funções.

Além disso, os três métodos básicos da interface COM ( QueryInterface , AddRef e Release ) são implementados dessa classe. Depois de decidir quais eventos deseja tratar, uma classe derivada dessa classe de wrapper é gerada com base na seleção; essa é a classe de modelo que você deve modificar para concluir a implementação (por exemplo, "classe A1ContentHandler: SAXContentHandlerImpl pública").

Como usar o AppWizard de Win32 SAX

Você usará o AppWizard para criar um aplicativo Visual C++ SAX que imprime o conteúdo XML para uma janela de console. O AppWizard cria automaticamente um arquivo Stock.xml na sua pasta de projeto, que você usará como dados XML de entrada para seu aplicativo de exemplo.

Para criar um aplicativo de exemplo, execute essas etapas:
  1. Copie o arquivo SAXAppWizard.awx para a pasta de modelo MSDev. Por padrão, isso está localizado em C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template.
  2. Inicie o Visual C++ e crie um novo projeto. Consulte SAX Win32 AppWizard entre as opções. Selecioná-lo, digite o nome do projeto (such as "a1") e, em seguida, clique em Avançar .
  3. Na segunda caixa de diálogo, você decide quais manipuladores e métodos que você deve ter para implementar. Para manter a simplicidade, implementar apenas o manipulador de conteúdo para manipular três eventos neste exemplo: startElement , caracteres e endElement . Clique duas vezes (ou use << ou >>) para selecionar ou remover itens. Clique em Concluir para gerar o projeto.
  4. Após o projeto é gerado, clique em modo de exibição de classe e você verá que duas classes são geradas para implementar o manipulador de conteúdo. Uma é SAXContentHandlerImpl , uma classe de wrapper de interface IXMLSAXContentHandler . Os três métodos básicos de interfaces COM ( QueryInterface , AddRef e Release ) são implementados nesta classe que controla o ciclo de vida do objeto.
  5. Você também ver que outra classe, que é chamado a1ContentHandler , é gerado com três métodos ( startElement , caracteres e endElement ) para manipular os eventos que você deseja. Dois métodos adicionais também são gerados: prt é um método auxiliar para impressão e CreateInstance é usado para criar uma instância de a1ContentHandler .
  6. No modo de exibição classe, em global , clique na função principal e verifique as etapas do aplicativo SAX:
    1. Crie leitor.
    2. Crie uma instância de a1ContentHandler .
    3. Chame o método putContentHandler registrá-lo com o leitor de XML.
    4. parseURL com o caminho do XML e análise de início.
Para concluir a implementação do manipulador de conteúdo, execute estas etapas:
  1. No modo de classe, clique duas vezes startElement para ir para a seção de implementação desse método. Verifique os parâmetros de entrada: pwchLocalName é o nome de marca do elemento e pAttributes é a coleção do elemento atual. Chame getLength para obter o número de atributos e usá-lo para iterar na coleção de atributo e imprimi-lo. Por exemplo:
    prt(L"<%s", pwchLocalName, cchLocalName);int lAttr;pAttributes->getLength(&lAttr);for(int i=0; i<lAttr; i++){	wchar_t * ln, * vl; int lnl, vll;	pAttributes->getQName(i,&ln,&lnl); 	prt(L" %s=", ln, lnl);	pAttributes->getValue(i,&vl,&vll);	prt(L"\"%s\"", vl, vll);}printf(">");					
  2. Clique duas vezes em caracteres no modo de exibição de classe e localize a seção de código. Imprima o valor de cada elemento. Por exemplo:
    prt(L"%s", pwchChars, cchChars);					
  3. Clique duas vezes em endElement no modo de exibição de classe e localize a seção de código. Não há muito trabalho para fazer esse método; imprimir somente a marca de fim. Por exemplo:
    prt(L"</%s>",pwchLocalName,cchLocalName);					
  4. Compilar e executar o aplicativo. Se você executá-lo dentro do depurador, coloque Stock.xml como a entrada do argumento de programa (configurações de projeto). Se tudo o que é implementado corretamente, você verá que o conteúdo dos Stock.xml impresso na janela do console.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 276505 - Última Revisão: 12/05/2015 22:19:01 - Revisão: 3.5

Microsoft XML Parser 3.0, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0

  • kbnosurvey kbarchive kbmt kbproductlink kbdownload kbdownload kbfile kbhowto kbmsxmlnosweep KB276505 KbMtpt
Comentários