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); } }
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); } }