由VBScript运行的xPath中的未知方法

时间:2013-12-16 17:43:47

标签: xpath vbscript msxml

错误消息是

  

msxml3.dll:未知方法。

     

/记录/ CelloXml /集成/外壳/ ServiceEvent [ - >最后()< - ] /服务/注释

我的代码如下所示,错误在案例NEW

案例OLD适用于<{p>}中的[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的一切都是我在工作中学到的。

2 个答案:

答案 0 :(得分:3)

只需添加以下属性

即可
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

答案 1 :(得分:1)

SomeNode[position() = last()]

是你想要的。