getElementByTag работает, но selectsinglenode не работает - PullRequest
2 голосов
/ 06 февраля 2010

Привет, у меня есть это классическое приложение 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 Ответ

4 голосов
/ 06 февраля 2010

Попробуйте: -

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

XPath по умолчанию выбирает только те элементы, которые являются прямыми детьми узла, для которого он выполняется. Сам документ является узлом и имеет только один дочерний элемент (в данном случае это узел «Словарь»). Следовательно, вам нужен «путь», чтобы выбрать сначала верхний узел, а затем нужный узел под ним. Следующее является эквивалентом в этом случае: -

set node = xmlDoc.documentElement.selectSingelNode("Word[@type='noun']")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...