getElementByTag有效,但chooseinglenode没有

时间:2010-02-06 03:25:09

标签: asp-classic

嗨,我有这个asp经典应用程序,我正在尝试检索单个节点,但我不断收到Object Required错误。 selectNodeBytags工作但返回一个节点列表我只想要一个节点。

“需要对象”的错误

 <%
option explicit

Dim xmlDoc

Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.async = False

Dim node

If xmlDoc.load(Server.MapPath("vocabulary.xml")) Then  
  xmlDoc.setProperty "SelectionLanguage", "XPath" 

 set node = xmlDoc.selectSingleNode("Word[@type='noun']") 
 Response.write node.text

end if
 %>

这可以使用getElementsByTagName

<%
option explicit

Dim xmlDoc

Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.async = False

Dim node

If xmlDoc.load(Server.MapPath("vocabulary.xml")) Then  
  xmlDoc.setProperty "SelectionLanguage", "XPath" 

   ' Grabs the elements in each "word" element 
   Dim nodelist
   Set nodelist = xmlDoc.getElementsByTagName("Word")   

   for each node in nodelist
     Response.write(node.nodeName) & "<br />"   'Returns parent node name
  Response.write(node.text) & "<br />"
   next
 end if 

 %>

我正在使用的xml文件

   <?xml version="1.0" encoding="utf-8" ?> 
<Vocabulary>
   <Word type="noun" level="1">
      <English>cat</English>
      <Spanish>gato</Spanish>
   </Word>
   <Word type="verb" level="1">
      <English>speak</English>
      <Spanish>hablar</Spanish>
   </Word>
   <Word type="adj" level="1">
      <English>big</English>
      <Spanish>grande</Spanish>
   </Word>
</Vocabulary>

1 个答案:

答案 0 :(得分:4)

尝试: -

set node = xmlDoc.selectSingleNode("/Vocabulary/Word[@type='noun']") 

默认情况下,XPath仅选择与其正在执行的节点的直接childern的元素。文档本身是一个节点,并且只有一个元素子元素(在本例中是“词汇表”节点)。因此,您需要一个“路径”来首先选择顶部节点,然后选择下面的所需节点。在这种情况下,以下是等效的: -

set node = xmlDoc.documentElement.selectSingelNode("Word[@type='noun']")