2013-12-16 2 views
2

сообщение об ошибкенеизвестный метод в XPATH ведении VBScript

msxml3.dll: Неизвестный метод.

/Запись/CelloXml/Интеграция/Case/ServiceEvent [-> последняя() < -]/Услуги/Комментировать

Мой код выглядит следующим образом и ошибка в случае NEW

Case OLD отлично работает с [0] там

'On Error Resume Next 

Public Function GetParameterXml() 
GetParameterXml = _ 
"<Parameters>" &_ 
    "<Parameter Value='Age' Code='A' Description='Age' Type='Combo' Tooltip='Would you like the newest or oldest Reason?'>" &_ 
    " <Options>" &_ 
    " <Option Code='O' Description='Oldest' Value='OLD' />" &_ 
    " <Option Code='N' Description='Newest' Value='NEW' />" &_ 
    " </Options>" &_ 
    "</Parameter>" &_ 
"</Parameters>" 
End Function 

'Parameter Variables 
Dim Age : Set Age = Parameters.Item(Bookmark , "Age") 

' PlaceHolder Variables 
Dim CommentNodes 

''' stop here and look around 
stop 

Select Case Age.Value 
Case "OLD": 
    Set CommentNodes = XmlDoc.SelectNodes("Record/CelloXml/Integration/Case/ServiceEvent[0]/Service/Comment") 
Case "NEW": 
    Set CommentNodes = XmlDoc.SelectNodes("Record/CelloXml/Integration/Case/ServiceEvent[last()]/Service/Comment") 
End Select 

For Each CommentNode In CommentNodes 
ReturnData = ReturnData & CommentNode.Text & MD 
Next 

If Len(ReturnData) > 0 Then 
ReturnData = Left(ReturnData, Len(ReturnData) - Len(MD)) 
Else 
ReturnData = vbNullString 
End If 

для некоторого реак сыну это не нравится last() есть ли другой способ сделать это? Мне нужна функциональность последней функции, так что если есть только один узел ServiceEvent, он все равно захватит этот узел.


Я не VBScript Guy (еще) и все, что я узнал о XPATH, что я узнал на работе.

+0

У меня есть полный рабочий кооператив de теперь отправлено на [CodeReview] (http://codereview.stackexchange.com/q/37254/18427) – Malachi

ответ

2

Просто добавьте следующее свойство

XmlDoc.SetProperty "SelectionLanguage", "XPath" 

Мой тест XML выглядит следующим образом

<root> 
    <child1> 
     <child2> 
      <child3>test1</child3> 
     </child2> 
     <child2> 
      <child3>test2</child3> 
     </child2> 
     <child2> 
      <child3>test3</child3> 
     </child2> 
     <child2> 
      <child3>test4</child3> 
     </child2> 
    </child1> 
</root> 

Мой тестовый код выглядит следующим образом

strXMLReadFile = "C:\Test.xml" 

Set xmlDoc = CreateObject("Microsoft.XMLDOM") 
xmlDoc.SetProperty "SelectionLanguage", "XPath" 
xmlDoc.Async = False 
xmlDoc.Load(strXMLReadFile) 

Set nodeXML = xmlDoc.SelectNodes("//root/child1/child2[last()]") 
msgbox nodeXML(0).Text 

Я получаю test4

+0

Мне пришлось изменить индекс другого запроса XPath с '[0]' на '[1]', но кроме этого он работал красиво, я не был уверен, как он будет взаимодействовать с другими частями приложения. но я думаю, теперь все должно быть хорошо. Я собираюсь отметить это для будущих токенов, я думаю, что я могу очистить код некоторых из них, используя это. – Malachi

1
SomeNode[position() = last()] 

- это то, что вы хотите.

+0

тоже не нравится, такая же ошибка, кроме ошибок, в 'position()' вместо 'last() ' – Malachi

+0

это сработало, но не было необходимости после того, как у меня было свойство, установленное для документа. – Malachi

Смежные вопросы