PROBLEMA: O valor de retorno de selectSingleNode método de teste no Visual Basic

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: 283803
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
A documentação do SDK MSXML informa que o método selectSingleNode dos objetos DOMDocument , IXMLDOMNode e IXMLDOMElement retorno um NULL se nenhum nó que corresponda à seqüência de caracteres de consulta especificado é encontrado no documento XML carregado. Testando o valor de retorno do método selectSingleNode para um valor NULL usando a função IsNull() no Visual Basic retorna False mesmo quando o método não retorna um nó que corresponda à seqüência de caracteres de consulta especificado. Código subseqüente que tenta acessar as propriedades e métodos do objeto retornado nó com base no valor de retorno do teste condicional IsNull() gera a seguinte mensagem de erro quando o método selectSingleNode não retorna um nó correspondente:
Erro em tempo de execução '91': variável Object ou with bloco variável não definida.
Causa
Um valor NULL é uma constante atômica que indica a ausência de um valor. Um valor nulo não pode ser atribuído a variáveis de objeto usando um Definir objvar = NULL instrução do Visual Basic. O método selectSingleNode retorna uma referência a um objeto IXMLDOMNode que representa o primeiro nó que corresponda à seqüência de caracteres de consulta especificado. No caso de não nós que correspondem a seqüência de consulta especificado, a variável de objeto de IXMLDOMNode destino ao qual o resultado de executar o método está atribuído permanece não inicializada. Não é atribuído um valor NULL.
Resolução
Use a É Nothing expressão condicional para testar a variável de objeto ao qual o valor de retorno de selectSingleNode é atribuído para determinar se um nó correspondente foi identificado no documento XML carregado.
Situação
Esse comportamento é por design.
Mais Informações
Se uma versão mais recente do MSXML foi instalada no modo lado a lado, você deve usar explicitamente o Globally Unique Identifiers (GUIDs) ou ProgIDs para essa versão para executar o código de exemplo. Por exemplo, o MSXML 4.0 pode ser instalado somente no modo lado a lado. Para obter informações adicionais sobre as alterações código que são necessárias para executar o código de exemplo com o analisador MSXML 4.0, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
305019INFO: MSXML 4.0 específicos GUIDs e ProgIds

Etapas para reproduzir o problema

Execute as seguintes etapas para configurar e testar um projeto Visual Basic que demonstra o problema especificado e a resolução sugerida. O exemplo de código a seguir usa a versão 3.0 do analisador MSXML. As identificações de programa dos objetos DOM MSXML precisem ser modificadas como necessário se você estiver usando uma versão mais antiga do analisador MSXML.
  1. Abra um novo projeto Standard EXE no Visual Basic. O Form1 é criado por padrão.
  2. No menu Project , clique em referências e, em seguida, adicione uma referência para Microsoft XML, v3.0 .
  3. Adicione um botão de comando ao Form1.
  4. Copie e cole o seguinte código no procedimento de evento Click do botão de comando :
    Dim doc As MSXML2.DOMDocument30Dim mnode As MSXML2.IXMLDOMNodeSet doc = New MSXML2.DOMDocument30doc.loadXML "<?xml version='1.0'?><Books><Book>XML Programming</Book></Books>"Set mnode = doc.selectSingleNode("//magazine")'Set mnode = doc.selectSingleNode("//Book")If IsNull(mnode) Then Debug.Print "No nodes selected"Else Debug.Print mnode.TextEnd IfSet doc = Nothing					
  5. Salve o projeto e executá-lo.
  6. Clique no botão comando para executar o código que carrega a seqüência XML de exemplo e chama o método selectSingleNode do objeto DOMDocument . A seqüência de caracteres de consulta ("//magazine") estiver especificado na chamada para selectSingleNode não coincide com nenhum de nós no carregado XML. Observação : O teste condicional IsNull(mnode) retorna False , mesmo que nenhum nó correspondente foi retornado pelo método selectSingleNode e o código gera o erro especificado ao tentar gravar a propriedade Text do objeto de nó para a janela de depuração do Visual Basic.

  7. Interromper a execução do projeto e substitua a instrução if condicional com o seguinte código:
    If mnode Is Nothing Then Debug.Print "No nodes selected"Else Debug.Print mnode.TextEnd If					
  8. Salvar e executar o projeto e observe que o teste condicional retorna o resultado desejado. A mensagem sem nós selecionada é exibida na janela do Visual Basic Debug como esperado.
  9. Comentar a primeira chamada para o método selectSingleNode que procura por elementos 'revista' e retire os comentários a segunda chamada que procura por elementos de 'Catálogo' que existem no XML carregado.
  10. Salve e execute o projeto e observe que o texto do primeiro catálogo elemento (programação de XML) no XML carregado é gravado para a janela Visual Basic Debug conforme necessário.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 283803 - Última Revisão: 12/05/2015 23:38:58 - Revisão: 1.1

Microsoft XML Parser 2.0, Microsoft XML Parser 2.5, Microsoft XML Parser 2.6, Microsoft XML Parser 3.0, Microsoft XML Parser 3.0 Service Pack 1, Microsoft XML Core Services 4.0, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbprb KB283803 KbMtpt
Comentários