コード例 #1
0
        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);
        }
コード例 #2
0
        // 得到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);              //返回父亲
        }