PROBLEMA: Mixagem diferentes versões do MSXML DOM objetos é não recomendável

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: 284856
Sintomas
Os objetos DOM (Document Object Model) da Microsoft XML (MSXML) expostos pelo analisador MSXML podem ser usados para criar por programação, carregar e manipular documentos XML. Evite a mistura de objetos DOM de várias versões do analisador MSXML porque ele não é uma prática recomendada de codificação. Se você tentar misturar versões diferentes de objetos DOM MSXML ao programar o, uma das seguintes mensagens de erro aparecerá:
Erro em tempo de execução '-2147024809(80070057) ': O parâmetro está incorreto
Erro em tempo de execução '-2147467262(80004002) ': nenhuma interface suportada
Causa
Quando você misturar diferentes versões do MSXML DOM objetos na chamada de método do objeto do DOM, o objeto de versão diferente do analisador que é fornecido como um parâmetro do método necessário é tratado como um objeto externo.
Resolução
Objetos de referência e uso implementados por uma única versão do analisador MSXML. Não misture versões diferentes de objetos DOM ao programa o MSXML DOM.
Mais Informações

Etapas para reproduzir o problema

Execute as seguintes etapas para configurar um exemplo do Microsoft Visual Basic que reproduz as mensagens de erro que aparecem na seção "Sintomas" deste artigo. O código no exemplo usa versões 2.6 e 3.0 do analisador MSXML. Você precisa ter as duas versões do analisador MSXML instalada no computador para reutilizar o código sem modificar os ProgIDs dos objetos DOM. Você também pode reproduzir o comportamento mistura MSXML 2.6 com 4.0, versão 3.0 com 4.0, e assim por diante.
  1. Crie um novo projeto Standard EXE no Visual Basic 6.0. O Form1 é criado por padrão.
  2. No menu Project , defina uma referência para Microsoft XML v2.6 .
  3. Adicione um CommandButton no Form1 e rotular o botão erro 1 .
  4. Copie e cole o seguinte código no procedimento de evento Click de erro 1 :
    Dim doc26 As MSXML2.DOMDocument26Dim node26 As MSXML2.IXMLDOMNodeSet doc26 = New MSXML2.DOMDocument26doc26.loadXML "<Books><Book>XML Programming</Book></Books>"Set node26 = doc26.childNodes(0)Dim doc30 As ObjectSet doc30 = CreateObject("MSXML2.DOMDocument.3.0")node26.appendChild doc30.createNode(NODE_ELEMENT, "Book", "")MsgBox doc26.xml					
  5. O código anterior carrega XML bem formado em uma instância de um objeto MSXML 2.6 DOMDocument . Em seguida, ele tenta acrescentar um objeto IXMLDOMNode do MSXML 3.0 em um nó filho do MSXML 2.6 DOMDocument .
  6. Salve e execute o projeto. Clique em 1 de erro para gerar a seguinte mensagem de erro na instrução node26.appendChild :
    Erro em tempo de execução '-2147024809(80070057) ': O parâmetro está incorreto
  7. Pare a execução do projeto.
  8. Adicione um segundo CommandButton no Form1 e rotule- erro 2 .
  9. Abra um arquivo de texto vazia no bloco de notas.
  10. Copie e cole o seguinte código XML no bloco de notas e salve o arquivo como books.xml na pasta de sua escolha:
    <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="books.xsl"?><books> <book>   <title>XML Step by Step</title> </book> <book>   <title>Mastering XML</title> </book></books>					
  11. Abra outro arquivo vazio no bloco de notas.
  12. Copie e cole o seguinte código XSL no bloco de notas e salve o arquivo como books.xsl na mesma pasta onde você salvou books.xml :
    <?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="books"> <html> <body> <h1>A list of books</h1> <table>  <xsl:apply-templates/> </table> </body> </html></xsl:template><xsl:template match="book"><tr>  <td><xsl:value-of select="./title"/></td></tr></xsl:template></xsl:stylesheet>					
  13. Copie e cole o seguinte código no procedimento de evento Click do erro 2 :
    Dim xmldoc As MSXML2.DOMDocument26Dim xsldoc As ObjectSet xmldoc = New MSXML2.DOMDocument26xmldoc.Load "<path to books.xml>"Set xsldoc = CreateObject("MSXML2.DOMDocument.3.0")xsldoc.Load "<path to books.xsl>"Debug.Print xmldoc.transformNode(xsldoc)					
    no código anterior, você precisa inserir os caminhos para books.xml e books.xsl nas instruções carregar os documentos XML e XSL em duas instâncias do objeto DOMDocument .

    Esse código carrega o documento XML em uma instância do objeto MSXML 2.6 DOMDocument . Em seguida, carrega o documento XSL em uma instância do objeto MSXML 3.0 DOMDocument e tenta executar a transformação XSL misturando os objetos DOMDocument das duas versões diferentes do analisador MSXML.

  14. Salve e execute o projeto. Clique em 2 de erro para gerar a seguinte mensagem de erro do método transformNode do objeto MSXML 2.6 DOMDocument :
    Erro em tempo de execução '-2147467262(80004002) ': nenhuma interface suportada
-2147024809-2147467262 80004002 80070057-2147024809(80070057)-2147467262(80004002)

Propriedades

ID do Artigo: 284856 - Última Revisão: 10/12/2001 10:52:00 - 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 Core Services 4.0

  • kbmt kbprb KB284856 KbMtpt
Comentários