Private Function GetMenuPositionFirstID(ValueMenuPosition)
Dim I As Integer
For I = 0 To RootNode.childNodes.Length - 1
If InStr(1, RootNode.selectNodes(".//MenuPosition")(I).Text, ValueMenuPosition) > 0 And RootNode.selectNodes(".//MenuParentID")(I).Text = 0 Then
GetMenuPositionFirstID = RootNode.selectNodes(".//ID")(I).Text
Exit For
End If
Next
End Function
因为菜单太长,以上函数适用,但效率极低。
说明:菜单中有主菜单,底部菜单,右侧右侧菜单等,分别为MenuPosition=0,1,2,3来表示
考虑用XPATH来提高效率,函数的意思是根据参数值ValueMenuPosition比如=1来找到第一个底部菜单的顶级菜单ID值,该值必须符合(MenuParentID=0),MenuPosition中含有1值。
------解决方案--------------------
写XPATH要看XML文档的DOM结构
------解决方案--------------------
Set oNode = oDoc.selectSingleNode("//Item[MenuPosition=0 and MenuParentID=0]/ID")
用变量:
Set oNode = oDoc.selectSingleNode("//Item[MenuPosition='" & ValueMenuPosition & "' and MenuParentID=0]/ID")
------解决方案--------------------
//MenuPosition含"1" 的
oDoc.selectNodes("//Item/MenuPosition[contains(text(),"1")=true]")
------解决方案--------------------
RootNode.selectSingleNode("//Item/MenuPosition[contains(text(),'1')=true]")
------解决方案--------------------
上面返回是 MenuPosition节点
改成返回Item节点
RootNode.selectSingleNode("//Item/MenuPosition[contains(text(),'1')=true]/parent::Item")
------解决方案--------------------
属性[ 不能嵌套[] ]
RootNode.selectSingleNode("Item[MenuParentID=0]/MenuPosition[contains(text(),'1')=true]/parent::Item")