错误消息是
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的一切都是我在工作中学到的。
答案 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()]
是你想要的。