コード例 #1
0
        private void SetToken(string[] tokenValues)
        {
            if (tokenValues == null || tokenValues.Length == 0)
            {
                throw new ArgumentException();
            }


            mValue = tokenValues[0];
            if (mValue.StartsWith("/"))
            {
                mValue         = mValue.Substring(1);
                mCheckChildren = true;
            }


            if (mValue != string.Empty)
            {
                bool isInQuote          = false;
                bool isInNodeName       = true;
                bool isInAttributeName  = false;
                bool isInAttributeValue = false;
                for (int i = 0; i < mValue.Length; i++)
                {
                    if (mValue[i] == '\"')
                    {
                        isInQuote = !isInQuote; continue;
                    }

                    if (!isInQuote)
                    {
                        switch (mValue[i])
                        {
                        case '[':
                            isInNodeName      = false;
                            isInAttributeName = true;
                            break;

                        case ']':
                            isInAttributeName  = false;
                            isInAttributeValue = false;
                            if (mExtensionType != TokenExtensionType.AttributeID)
                            {
                                if (int.TryParse(mAttributeTag, out mIndex))
                                {
                                    mExtensionType = TokenExtensionType.Index;
                                }
                                mAttributeTag = string.Empty;
                            }
                            break;

                        case '@':
                            mExtensionType = TokenExtensionType.AttributeID;
                            break;

                        case '=':
                            if (isInAttributeName)
                            {
                                isInAttributeName  = false;
                                isInAttributeValue = true;
                            }
                            break;

                        default:
                            if (isInNodeName)
                            {
                                mName += mValue[i];
                            }
                            else if (isInAttributeName)
                            {
                                mAttributeTag += mValue[i];
                            }
                            break;
                        }
                    }
                    else if (isInAttributeValue)
                    {
                        mAttributeValue += mValue[i];
                    }
                }
            }


            if (tokenValues.Length > 1)
            {
                string[] newVals = new string[tokenValues.Length - 1];
                for (int i = 1; i < tokenValues.Length; i++)
                {
                    newVals[i - 1] = tokenValues[i];
                }
                mChild = new XPath(newVals);
            }
        }
コード例 #2
0
ファイル: XPath.cs プロジェクト: sevensky/win8stock
        private void SetToken(string[] tokenValues)
        {
            if (tokenValues == null || tokenValues.Length == 0) throw new ArgumentException();


            mValue = tokenValues[0];
            if (mValue.StartsWith("/"))
            {
                mValue = mValue.Substring(1);
                mCheckChildren = true;
            }


            if (mValue != string.Empty)
            {
                bool isInQuote = false;
                bool isInNodeName = true;
                bool isInAttributeName = false;
                bool isInAttributeValue = false;
                for (int i = 0; i < mValue.Length; i++)
                {
                    if (mValue[i] == '\"') { isInQuote = !isInQuote; continue; }

                    if (!isInQuote)
                    {
                        switch (mValue[i])
                        {
                            case '[':
                                isInNodeName = false;
                                isInAttributeName = true;
                                break;
                            case ']':
                                isInAttributeName = false;
                                isInAttributeValue = false;
                                if (mExtensionType != TokenExtensionType.AttributeID)
                                {
                                    if (int.TryParse(mAttributeTag, out mIndex))
                                    {
                                        mExtensionType = TokenExtensionType.Index;
                                    }
                                    mAttributeTag = string.Empty;
                                }
                                break;
                            case '@':
                                mExtensionType = TokenExtensionType.AttributeID;
                                break;
                            case '=':
                                if (isInAttributeName)
                                {
                                    isInAttributeName = false;
                                    isInAttributeValue = true;
                                }
                                break;
                            default:
                                if (isInNodeName) { mName += mValue[i]; }
                                else if (isInAttributeName) { mAttributeTag += mValue[i]; }
                                break;
                        }
                    }
                    else if (isInAttributeValue)
                    {
                        mAttributeValue += mValue[i];
                    }
                }
            }


            if (tokenValues.Length > 1)
            {
                string[] newVals = new string[tokenValues.Length - 1];
                for (int i = 1; i < tokenValues.Length; i++)
                {
                    newVals[i - 1] = tokenValues[i];
                }
                mChild = new XPath(newVals);
            }
        }