Este artigo apresenta principalmente as precauções ao usar MSXML2.DOMDocument para processar dados XML em asp. Este artigo fornece 4 problemas que precisam de atenção. Amigos necessitados podem consultar o seguinte.
Quando o asp usa MSXML2.DOMDocument para carregar arquivos xml na rede, você precisa prestar atenção às configurações antes de chamar o método load:
Copie o código do código da seguinte forma:oXML.setProperty ServerHTTPRequest, verdadeiro
Ou seja, se a solicitação ServerHTTPRequest estiver habilitada, não ocorrerá erro de sistema: -2146697209.
Ao usar o componente MSXML2.DOMDocument em asp, você precisa prestar atenção às 4 situações a seguir:
Copie o código do código da seguinte forma:<%
Dim oXML, oXMLError, ReturnValue, x
Definir oXML = Server.CreateObject(MSXML2.DOMDocument)
' Define se DOMDocument carrega arquivos xml de forma assíncrona ou síncrona
oXML.async = false'==========A
' Finalidade da configuração: Verdadeiro/Falso, indicando se deve usar o componente ServerXMLHTTP seguro para servidor para carregar documentos XML
oXML.setProperty ServerHTTPRequest, verdadeiro'==========B
'Carrega arquivo xml da rede via HTTP
ReturnValue = oXML.Load(http://localhost/asp/ServerXML.xml)'==========C
'Ou carregue o arquivo xml local do servidor
'ReturnValue = oXML.Load(d:/test.xml)'==========D
' Imprime o valor de retorno de DOMDocument.load:
Response.write O resultado do método de carregamento é = & ReturnValue & <br>
%>
Primeiro caso (carregando documento vazio):
Por padrão, o atributo assíncrono do objeto DOMDocument é TRUE, o que significa que ele é carregado de forma assíncrona. E o componente ServerXMLHTTP não é usado durante o carregamento. Ou seja, comente as linhas A e B no código acima.
Copie o código do código da seguinte forma:'oXML.async = falso'==========A
'oXML.setProperty ServerHTTPRequest, verdadeiro'==========B
Neste momento, o carregamento será bem-sucedido. ReturnValue será VERDADEIRO. Mas o documento XML carregado no DOMDocument está vazio! Em outras palavras, o TRUE retornado pelo método load é uma cobertura! O resultado é assim: Os programadores devem ter cuidado neste caso! Embora o XML não relate nenhum erro e o método load também indique sucesso, o atributo xml do DOM está vazio.
O segundo caso (motivo do erro: -2146697209):
Se você declarar explicitamente o atributo async como FALSE, o documento XML será carregado de forma síncrona. E o componente ServerXMLHTTP não é usado durante o carregamento. Ou seja, comente apenas a linha B no código acima.
Copie o código do código da seguinte forma:oXML.async = false'==========A
'oXML.setProperty ServerHTTPRequest, verdadeiro'==========B
Então você encontrará o fracasso! ReturnValue será falso. O motivo do erro é: -2146697209 - Não há dados disponíveis para o recurso necessário. Em outras palavras, o carregamento sincronizado de recursos XML na Internet não terá sucesso! !
Terceiro caso (não permitido):
Se o seu atributo assíncrono for TRUE, o documento XML será carregado de forma assíncrona. E use o componente ServerXMLHTTP ao carregar. Ou seja, habilite a linha B no código acima. Comente a linha A do código.
Copie o código do código da seguinte forma:'oXML.async = falso'==========A
oXML.setProperty ServerHTTPRequest, verdadeiro'==========B
Relatou um bug! Observe que não é permitido usar componentes SXH para carregar documentos XML de forma assíncrona! A descrição do erro é: -1072897486 - A propriedade ServerHTTPRequest não pode ser usada ao carregar um documento de forma assíncrona e só é suportada no Windows NT 4.0 e superior.
O quarto caso (uso correto):
Se você declarar explicitamente o atributo async como FALSE, o documento XML será carregado de forma síncrona. E use o componente ServerXMLHTTP ao carregar. Ou seja, habilite as linhas A e B no código acima.
Copie o código do código da seguinte forma:oXML.async = false'==========A
oXML.setProperty ServerHTTPRequest, verdadeiro'==========B
É isso! Mostra que usar o componente SXH para carregar documentos XML pode corrigir o erro de carregamento assíncrono de recursos da Internet.
Resumir
Método de carregamento | Quer usar Componente ServidorXMLHTTP | Carregar resultados |
| Carregamento assíncrono | Não usado | O carregamento será bem-sucedido. Mas o documento XML carregado no DOMDocument está vazio |
| Carregamento síncrono | Não usado | Encontrará o fracasso! O motivo do erro é: -2146697209 - Não há dados disponíveis para o recurso necessário. |
| Carregamento assíncrono | usar | não permitido |
| Carregamento síncrono | usar | verdadeiramente bem sucedido |