public override bool MoveToNextNamespace(XPathNamespaceScope namespaceScope) { //StreamUtil.WriteText("I:\\debug.txt","进到 MoveToNextNamespace()\r\n"); Debug.Assert(this.m_navigatorState.CurItem != null, ""); if (this.m_navigatorState.CurItem == this.m_navigatorState.VirtualRoot) { return(false); } if (!(this.m_navigatorState.CurItem is AttrItem)) { return(false); } AttrItem attr = (AttrItem)this.m_navigatorState.CurItem; if (attr.IsNamespace == false) { return(false); } ElementItem element = (ElementItem)attr.parent; ItemList namespaceList = element.NamespaceList; if (namespaceList.Count > 0) { int nIndex = namespaceList.IndexOf(this.m_navigatorState.CurItem); if (nIndex == -1) { return(false); } if (nIndex + 1 >= namespaceList.Count) { return(false); } this.m_navigatorState.CurItem = namespaceList[nIndex + 1]; return(true); } return(false); }
// 得到startItem的一个附近的节点 // MoveMember.Auto 先下,再上,再父亲 // MoveMember.Front 前方 // MoveMember.Behind 方 public static Item GetNearItem(Item startItem, MoveMember moveMember) { Item item = startItem; if (item == null) { return(null); } if (item.parent == null) { return(null); } int nRet = -1; ItemList aItem = null; // 如果item的parent对象是ElementItem,先试图找其儿子 if (item.parent != null) { aItem = item.parent.children; if (aItem != null) { nRet = aItem.IndexOf(item); } if (nRet == -1) { Debug.Assert(item.parent != null, "上面已经判断过了"); aItem = ((ElementItem)item.parent).attrs; if (aItem != null) { nRet = aItem.IndexOf(item); } } } if (nRet == -1) { return(null); } Debug.Assert(aItem != null, "上面已经判断过了nRet"); if (moveMember == MoveMember.Auto) { if (aItem.Count > nRet + 1) //返回下一个 { return(aItem[nRet + 1]); } else if (nRet > 0) { return(aItem[nRet - 1]); // 返回上一个 } } if (moveMember == MoveMember.Front) { if (nRet > 0) { return(aItem[nRet - 1]); } } if (moveMember == MoveMember.Behind) { if (aItem.Count > nRet + 1) { return(aItem[nRet + 1]); } } return(item.parent); //返回父亲 }