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

XPATH效率求解
以下为遍历,函数是正确的,但我需要优化,从而得到更快的效率,比如xpath或者其它方法,SQL就免了。注意此函数支持递归哟。

Public Function GetAllSubMenuID1(MenuID, ListMethod)
    Dim StringTemp, I
    StringTemp = CStr(MenuID)
    If ListMethod = "" Then ListMethod = GetXmlNodeText(MenuID, "MenuListMethod")
    For I = 0 To RootNode.selectNodes(".//ID").Length - 1
        If CLng(RootNode.selectNodes(".//MenuParentID")(I).Text) = CLng(MenuID) And CLng(RootNode.selectNodes(".//MenuListMethod")(I).Text) = CLng(ListMethod) Then
            StringTemp = StringTemp & "," & GetAllSubMenuID1(RootNode.selectNodes(".//ID")(I).Text, ListMethod)
        End If
    Next
    GetAllSubMenuID1 = StringTemp
End Function

此函数说明:遍历整个XML,当MenuParentID=Menuid并且MenuListMehot=listmethod时,将ID值传给函数,再对ID递归查询,看看其下有没有子菜单。
结构为
<SiteMenu>
  <Item>
    <ID/>
    <MenuParentID/>
    <MenuListMethod/>
  </Item>
  <Item>
    <ID/>
    <MenuParentID/>
    <MenuListMethod/>
  </Item>
  <Item>
    <ID/>
    <MenuParentID/>
    <MenuListMethod/>
  </Item>
</SiteMenu>

------解决方案--------------------

取  当MenuParentID=Menuid并且MenuListMehot=listmethod时, ID值 
RootNode.selectSingleNode("//Item[MenuParentID='Menuid' and MenuListMethod='listmethod']/ID").Text

ID递归查询,看看其下有没有子菜单。什么意思? MenuParentID=上面返回的ID?
 RootNode.selectNodes("//Item[MenuParentID='xxxID']")