Mvp.Xml.XPointer.XPointerParser.ParseXPointer C# (CSharp) Method

ParseXPointer() public static method

public static ParseXPointer ( string xpointer ) : Mvp.Xml.XPointer.Pointer
xpointer string
return Mvp.Xml.XPointer.Pointer
        public static Pointer ParseXPointer(string xpointer)
        {
            IList<PointerPart> parts;
            XPointerLexer lexer;
            lexer = new XPointerLexer(xpointer);
            lexer.NextLexeme();
            if (lexer.Kind == XPointerLexer.LexKind.NCName && !lexer.CanBeSchemaName)
            {
                //Shorthand pointer
                Pointer ptr = new ShorthandPointer(lexer.NCName);
                lexer.NextLexeme();
                if (lexer.Kind != XPointerLexer.LexKind.Eof)
                    throw new XPointerSyntaxException(Monobjc.Tools.Sdp.Properties.Resources.InvalidTokenAfterShorthandPointer);
                return ptr;
            }
            else
            {
                //SchemaBased pointer
                parts = new List<PointerPart>();
                while (lexer.Kind != XPointerLexer.LexKind.Eof)
                {
                    if ((lexer.Kind == XPointerLexer.LexKind.NCName ||
                        lexer.Kind == XPointerLexer.LexKind.QName) &&
                        lexer.CanBeSchemaName)
                    {
                        XPointerSchema.SchemaType schemaType = GetSchema(lexer, parts);
                        //Move to '('
                        lexer.NextLexeme();
                        switch (schemaType)
                        {
                            case XPointerSchema.SchemaType.Element:
                                ElementSchemaPointerPart elemPart = ElementSchemaPointerPart.ParseSchemaData(lexer);
                                if (elemPart != null)
                                    parts.Add(elemPart);
                                break;
                            case XPointerSchema.SchemaType.Xmlns:
                                XmlnsSchemaPointerPart xmlnsPart = XmlnsSchemaPointerPart.ParseSchemaData(lexer);
                                if (xmlnsPart != null)
                                    parts.Add(xmlnsPart);
                                break;
                            case XPointerSchema.SchemaType.XPath1:
                                XPath1SchemaPointerPart xpath1Part = XPath1SchemaPointerPart.ParseSchemaData(lexer);
                                if (xpath1Part != null)
                                    parts.Add(xpath1Part);
                                break;
                            case XPointerSchema.SchemaType.XPointer:
                                XPointerSchemaPointerPart xpointerPart = XPointerSchemaPointerPart.ParseSchemaData(lexer);
                                if (xpointerPart != null)
                                    parts.Add(xpointerPart);
                                break;
                            default:
                                //Unknown scheme
                                lexer.ParseEscapedData();
                                break;
                        }
                        //Skip ')'
                        lexer.NextLexeme();
                        //Skip possible whitespace
                        if (lexer.Kind == XPointerLexer.LexKind.Space)
                            lexer.NextLexeme();
                    }
                    else
                        throw new XPointerSyntaxException(Monobjc.Tools.Sdp.Properties.Resources.InvalidToken);
                }
                return new SchemaBasedPointer(parts, xpointer);
            }
        }

Usage Example

Esempio n. 1
0
        /// <summary>
        /// Initializes the <c>XPointerReader</c>.
        /// </summary>
        private void Init(XPathNavigator nav, string xpointer)
        {
            Pointer pointer = XPointerParser.ParseXPointer(xpointer);

            _pointedNodes = pointer.Evaluate(nav);
            //There is always at least one identified node
            //XPathNodeIterator is already at the first node
            _reader = new SubtreeXPathNavigator(_pointedNodes.Current).ReadSubtree();
        }
All Usage Examples Of Mvp.Xml.XPointer.XPointerParser::ParseXPointer