日期:2014-05-16  浏览次数:20937 次

用XPATH实现这个函数的功能
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")