为什么我经常遇到对象错误?

问题描述:

我已经从http://devguru.org/Technologies/xmldom/quickref/node_selectSingleNode.html为什么我经常遇到对象错误?

中剪切和粘贴这个例子,我无法让它工作。

我不断收到对象错误是这样的:

Microsoft VBScript运行时(0x800A01A8) 所需的对象

这是代码和XML文件,我使用

<% 
    option explicit 

    Dim objXMLDoc 

    Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
    objXMLDoc.async = False 
    objXMLDoc.load(Server.MapPath("vocabulary.xml")) 

    Dim Node 

Set Node = objXMLDoc.documentElement.selectSingleNode("label") 
Response.write Node.text 

%> 

xml文件

<?xml version="1.0" encoding="utf-8" ?> 
    <labels> 
     <label>Some label</label> 
    </labels> 

提到的错误是prob巧妙地在最后一行的水平。假设对XMLDOM对象的所有其他调用都能正常工作,selectSingleNode将返回空,因为找不到“label”作为路径。

尝试用

Set Node = objXMLDoc.documentElement.selectSingleNode("labels/label") 

代替。另外,这也是这种类型的DOM逻辑的一个很好的做法,你可以从的selectSingleNode

Set Node = objXMLDoc.documentElement.selectSingleNode("label") 
If Node = Nothing 
Ehen 
    Response.Write "Not found..." 
Else 
Response.Write Node.text 
+0

“labels”是文档元素,所以documentElement.selectSingleNode调用应该确实返回一个标签节点。 – wsanville 2010-02-06 03:19:46

+1

我需要使用selectSingleNode的完整路径才能正常工作。 – chobo 2010-02-09 07:00:03

我试过你的代码和它的工作原理测试成功返回。所以我可以想到两个可能的原因。

  1. 错误来自objXMLDoc.load而不是objXMLDoc.selectSingleNode抛出这意味着XML文件未找到(或许可被拒绝?)。检查文件路径是否确实有效并且可以访问。尝试Response.write objXMLDoc.text以查看是否可以获取任何内容,也应显示“某些标签”。

  2. 我只是猜测,但它可能会因为不同版本的“MSXML”库

如果它没有理由1,你可能想尝试下面的代码(从MSDN reference):

objXMLDoc.setProperty "SelectionLanguage", "XPath" 'add this line 
Dim Node 
Set Node = objXMLDoc.documentElement.selectSingleNode("//label") 'use //label 
Response.write Node.text 
+0

我也试过切换msxml版本。我不确定这是否有帮助。 – chobo 2010-02-09 07:00:27