コード例 #1
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator Select(string expression, XPathNavigator source,
                                               XmlNamespaceManager context)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(context);
            return(source.Select(expr));
        }
コード例 #2
0
        /// <summary>
        /// Evaluates the given expression and returns the typed result.
        /// </summary>
        public static object Evaluate(string expression, XPathNavigator source,
                                      XmlNamespaceManager context)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(context);
            return(source.Evaluate(expr));
        }
コード例 #3
0
        /// <summary>
        /// Evaluates the given expression and returns the typed result.
        /// </summary>
        public static object Evaluate(string expression, XPathNavigator source,
                                      params XmlPrefix[] prefixes)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, null, prefixes, null));
            return(source.Evaluate(expr));
        }
コード例 #4
0
        private static Uri FindAlternateUri(XPathNavigator navigator, Uri ns)
        {
            Uri               uri = null;
            XPathNavigator    nav = navigator.Clone();
            XPathNodeIterator iter;

            XmlNamespaceManager nsm = new XmlNamespaceManager(nav.NameTable);

            nsm.AddNamespace(DefaultValues.AtomNSPrefix, ns.ToString());

            XPathExpression expr = nav.Compile("child::atom:link[@type=\"text/html\" and @rel=\"alternate\"]");

            expr.SetContext(nsm);
            iter = nav.Select(expr);

            if (iter.Count == 0)
            {
                expr = nav.Compile("child::atom:link[@type=\"text/plain\" and @rel=\"alternate\"]");
                expr.SetContext(nsm);
                iter = nav.Select(expr);
            }

            if (iter.CurrentPosition == 0)
            {
                iter.MoveNext();
            }

            // select the attributes
            iter = iter.Current.Select("@*");
            do
            {
                switch (iter.Current.Name.ToLower())
                {
                case "href":
                    try
                    {
                        uri = resolveUri(xmlBaseRootUri, iter.Current.Value);
                    }
                    catch { }
                    break;
                }
            } while (iter.MoveNext());


            return(uri);
        }
コード例 #5
0
        /// <summary>
        /// Evaluates the given expression and returns the typed result.
        /// </summary>
        public static object Evaluate(string expression, XPathNavigator source,
                                      params XPathVariable[] variables)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, null, null, variables));
            return(source.Evaluate(expr));
        }
コード例 #6
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator Select(string expression, XPathNavigator source,
                                               XmlPrefix[] prefixes, params XPathVariable[] variables)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, null, prefixes, variables));
            return(source.Select(expr));
        }
コード例 #7
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator Select(string expression, XPathNavigator source,
                                               XmlNamespaceManager context, params XPathVariable[] variables)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, context, null, variables));
            return(source.Select(expr));
        }
コード例 #8
0
 /// <summary>Sets the manager to use to resolve expression namespaces.</summary>
 public void SetContext(XmlNamespaceManager nsManager)
 {
     if (_expr != null)
     {
         _expr.SetContext(nsManager);
     }
     _ns = nsManager;
 }
コード例 #9
0
        public void FragmentDeserialization()
        {
            #region <publishers> framgment deserialization

            XPathDocument  doc = new XPathDocument(Globals.GetResource(Globals.PubsNsResource));
            XPathNavigator nav = doc.CreateNavigator();

            // Deserialize all publishers.
            XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);
            mgr.AddNamespace("mvp", "mvp-xml");

            XPathExpression expr = nav.Compile("/mvp:dsPubs/mvp:publishers");
            expr.SetContext(mgr);

            XmlSerializer ser = new XmlSerializer(typeof(publishers));

            XPathNodeIterator it = nav.Select(expr);
            while (it.MoveNext())
            {
                XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
                object publisher       = ser.Deserialize(r);
                Assert.IsNotNull(publisher);
            }

            #endregion <publishers> framgment deserialization

            #region <titles> framgment deserialization

            // Now deserialize expensive titles separately.

            expr = nav.Compile("//mvp:titles[mvp:price>10]");
            expr.SetContext(mgr);

            ser = new XmlSerializer(typeof(titles));

            it = nav.Select(expr);
            while (it.MoveNext())
            {
                XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
                object title           = ser.Deserialize(r);
                Assert.IsNotNull(title);
            }

            #endregion <titles> framgment deserialization
        }
        public override object Invoke(XsltContext xsltContext, object[] args, XPathNavigator docContext)
        {
            string          str   = XPathMessageFunction.ToString(args[0]);
            string          xpath = string.Format(CultureInfo.InvariantCulture, "/s11:Envelope/s11:Header/*[@s11:actor='{0}'] | /s12:Envelope/s12:Header/*[@s12:role='{1}']", new object[] { str, str });
            XPathExpression expr  = docContext.Compile(xpath);

            expr.SetContext((XmlNamespaceManager)xsltContext);
            return(docContext.Evaluate(expr));
        }
コード例 #11
0
        public void SetContext(XsltContext context)
        {
            path.SetContext(context);

            if (firstStep != null)
            {
                firstStep.SetContext(context);
            }
        }
コード例 #12
0
        /// <summary>
        /// This is used to get the string result from evaluating an XPath expression against the given
        /// document and context.
        /// </summary>
        /// <param name="document">The document to use</param>
        /// <param name="expression">The XPath expression to evaluate</param>
        /// <param name="context">The context to use</param>
        /// <returns>The evaluated expression result</returns>
        /// <overloads>There are two overloads for this method</overloads>
        public static string EvalXPathExpr(this IXPathNavigable document, XPathExpression expression,
                                           CustomContext context)
        {
            XPathExpression t = expression.Clone();

            t.SetContext(context);

            return(document.CreateNavigator().Evaluate(t).ToString());
        }
コード例 #13
0
        /// <summary>
        /// Implements the following function
        ///    object dyn2:evaluate(node-set, string, string?)
        /// </summary>
        /// <param name="contextNode">Context node</param>
        /// <param name="expression">Expression to evaluate</param>
        /// <param name="namespaces">Namespace bindings</param>
        /// <returns>Result of evaluating given Xpath expression WRT to context node.</returns>
        /// <remarks>THIS FUNCTION IS NOT PART OF EXSLT!!!</remarks>
        public object Evaluate(XPathNodeIterator contextNode, string expression, string namespaces)
        {
            if (expression == string.Empty || contextNode == null)
            {
                return(string.Empty);
            }

            if (contextNode.MoveNext())
            {
                try
                {
                    XPathExpression expr    = contextNode.Current.Compile(expression);
                    ExsltContext    context = new ExsltContext(contextNode.Current.NameTable);
                    XPathNavigator  node    = contextNode.Current.Clone();
                    if (node.NodeType != XPathNodeType.Element)
                    {
                        node.MoveToParent();
                    }

                    if (node.MoveToFirstNamespace())
                    {
                        do
                        {
                            context.AddNamespace(node.Name, node.Value);
                        } while (node.MoveToNextNamespace());
                    }
                    if (namespaces != string.Empty)
                    {
                        try
                        {
                            Regex regexp = new Regex(@"xmlns:(?<p>\w+)\s*=\s*(('(?<n>.+)')|(""(?<n>.+)""))\s*");
                            Match m      = regexp.Match(namespaces);
                            while (m.Success)
                            {
                                try
                                {
                                    context.AddNamespace(m.Groups["p"].Value,
                                                         m.Groups["n"].Value);
                                }
                                catch { }
                                m = m.NextMatch();
                            }
                        }
                        catch { }
                    }
                    expr.SetContext(context);
                    return(contextNode.Current.Evaluate(expr, contextNode));
                }
                catch
                {
                    //Any exception such as syntax error in XPath
                    return(string.Empty);
                }
            }
            //Empty nodeset as context node
            return(string.Empty);
        }
コード例 #14
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator SelectSorted(string expression, XPathNavigator source,
                                                     object sortExpression, IComparer comparer, params XPathVariable[] variables)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, null, null, variables));
            PrepareSort(expr, source, sortExpression, comparer);
            return(source.Select(expr));
        }
コード例 #15
0
ファイル: XPathQueryManager.cs プロジェクト: charlenni/Mapsui
 /// <summary>
 /// This method sets the inherent XPathNodeIterator instance.
 /// </summary>
 /// <param name="xPath">A compiled XPath expression</param>
 private void FindXPath(XPathExpression?xPath)
 {
     xPath?.SetContext(_paramContext);
     if (xPath != null)
     {
         _xIter = _xNav?.Select(xPath);
     }
     InitializeCustomContext(_paramContext);
 }
コード例 #16
0
 public override object Invoke(XsltContext xsltContext, object[] args, XPathNavigator docContext)
 {
     if (this.expr == null)
     {
         XPathExpression expression = docContext.Compile("(/s11:Envelope/s11:Header | /s12:Envelope/s12:Header)[1]");
         expression.SetContext(XPathMessageFunction.Namespaces);
         this.expr = expression;
     }
     return(docContext.Evaluate(this.expr));
 }
コード例 #17
0
 public override object Invoke(XsltContext xsltContext, object[] args, XPathNavigator docContext)
 {
     if (this.expr == null)
     {
         XPathExpression expression = docContext.Compile("(sm:header()/wsa10:ReplyTo | sm:header()/wsaAugust2004:ReplyTo)[1]");
         expression.SetContext((XmlNamespaceManager) new XPathMessageContext());
         this.expr = expression;
     }
     return(docContext.Evaluate(this.expr));
 }
コード例 #18
0
ファイル: SelectXmlCommand.cs プロジェクト: xylographe/Pscx
        protected override void ProcessXmlReader(XmlReader xmlReader)
        {
            try
            {
                while (!xmlReader.EOF)
                {
                    XPathDocument     xpathDocument  = new XPathDocument(xmlReader);
                    XPathNavigator    xpathNavigator = xpathDocument.CreateNavigator();
                    XPathNodeIterator nodes;

                    if (_xmlNamespaces != null)
                    {
                        XmlNamespaceManager xmlNamespaceMgr = new XmlNamespaceManager(xmlReader.NameTable);
                        foreach (string xmlNamespace in _xmlNamespaces)
                        {
                            string[] tmp = xmlNamespace.Split(new char[] { '=' });
                            xmlNamespaceMgr.AddNamespace(tmp[0].Trim(), tmp[1].Trim());
                        }
                        _compiledXPathExpression.SetContext(xmlNamespaceMgr);
                        nodes = xpathNavigator.Select(_compiledXPathExpression);
                    }
                    else
                    {
                        XPathNavigator namespaceResolver = xpathNavigator.Clone();
                        if (namespaceResolver.NodeType == XPathNodeType.Root)
                        {
                            // Move to doc element where namespaces are commonly defined
                            namespaceResolver.MoveToFirstChild();
                        }
                        nodes = xpathNavigator.Select(_xpathExpression, namespaceResolver);
                    }

                    while (nodes.MoveNext())
                    {
                        WriteObject(nodes.Current.Clone());
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorHandler.WriteXmlError(ex);
            }
        }
コード例 #19
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator SelectSorted(string expression, XPathNavigator source,
                                                     object sortExpression, XmlSortOrder order, XmlCaseOrder caseOrder, string lang, XmlDataType dataType,
                                                     XmlNamespaceManager context)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(context);
            PrepareSort(expr, source, sortExpression, order, caseOrder, lang, dataType, context);
            return(source.Select(expr));
        }
コード例 #20
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator SelectSorted(string expression, XPathNavigator source,
                                                     object sortExpression, XmlSortOrder order, XmlCaseOrder caseOrder, string lang, XmlDataType dataType,
                                                     params XPathVariable[] variables)
        {
            XPathExpression expr = GetCompiledExpression(expression, source);

            expr.SetContext(PrepareContext(source, null, null, variables));
            PrepareSort(expr, source, sortExpression, order, caseOrder, lang, dataType);
            return(source.Select(expr));
        }
コード例 #21
0
 /// <summary>Reinitializes the element with a new expression,
 /// after the class has already been constructed</summary>
 /// <param name="xpathExpression">The expression to evaluate.</param>
 protected void InitializeExpression(string xpathExpression)
 {
     _xpath = xpathExpression;
     _expr  = Config.DefaultNavigator.Compile(xpathExpression);
     _ret   = _expr.ReturnType;
     if (_ns != null)
     {
         _expr.SetContext(_ns);
     }
 }
コード例 #22
0
ファイル: DocXmlDocument.cs プロジェクト: sillsdev/WorldPad
        protected void InitXPathExpression(string strXPathExpr, ref XPathExpression xpe)
        {
            XPathNavigator navigator = CreateNavigator();

            xpe = navigator.Compile(strXPathExpr);
            XmlNamespaceManager manager;

            GetNamespaceManager(navigator, out manager);
            xpe.SetContext(manager);
        }
コード例 #23
0
ファイル: QueryMatcher.cs プロジェクト: dox0/DotNet471RS3
        /// <summary>
        /// Compile the given filter to run on an external (fx) xpath engine
        /// </summary>
        internal static OpcodeBlock CompileForExternalEngine(string expression, XmlNamespaceManager namespaces, object item, bool match)
        {
            // Compile...
            XPathExpression xpathExpr = QueryMatcher.fxCompiler.Compile(expression);

            // Fx will bind prefixes and functions here.
            if (namespaces != null)
            {
                // There's a bug in System.Xml.XPath.  If we pass an XsltContext to SetContext it won't throw if there's
                // an undefined prefix.
                if (namespaces is XsltContext)
                {
                    // Lex the xpath to find all prefixes used
                    XPathLexer lexer = new XPathLexer(expression, false);
                    while (lexer.MoveNext())
                    {
                        string prefix = lexer.Token.Prefix;

                        if (prefix.Length > 0 && namespaces.LookupNamespace(prefix) == null)
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XsltException(SR.GetString(SR.FilterUndefinedPrefix, prefix)));
                        }
                    }
                }

                xpathExpr.SetContext(namespaces);
            }

            //
            // FORCE the function to COMPILE - they won't bind namespaces unless we check the return type
            //
            if (XPathResultType.Error == xpathExpr.ReturnType)
            {
                // This should never be reached.  The above property should throw if there's an error
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XPathException(SR.GetString(SR.FilterCouldNotCompile, expression)));
            }

            OpcodeBlock codeBlock = new OpcodeBlock();
            SingleFxEngineResultOpcode op;

            if (!match)
            {
                op = new QuerySingleFxEngineResultOpcode();
            }
            else
            {
                op = new MatchSingleFxEngineResultOpcode();
            }

            op.XPath = xpathExpr;
            op.Item  = item;

            codeBlock.Append(op);
            return(codeBlock);
        }
コード例 #24
0
ファイル: ExampleComponent.cs プロジェクト: zyj0021/SHFB
        //=====================================================================

        /// <inheritdoc />
        public override void Initialize(XPathNavigator configuration)
        {
            XPathNodeIterator contentNodes = configuration.Select("examples");

            foreach (XPathNavigator contentNode in contentNodes)
            {
                string file = contentNode.GetAttribute("file", String.Empty);
                file = Environment.ExpandEnvironmentVariables(file);

                if (String.IsNullOrEmpty(file))
                {
                    WriteMessage(MessageLevel.Error, "Each examples element must contain a file attribute.");
                }

                LoadContent(file);
            }

            WriteMessage(MessageLevel.Info, "Loaded {0} code snippets", snippets.Count);

            XPathNodeIterator colorsNodes = configuration.Select("colors");

            foreach (XPathNavigator colorsNode in colorsNodes)
            {
                string language = colorsNode.GetAttribute("language", String.Empty);
                List <ColorizationRule> rules = new List <ColorizationRule>();

                XPathNodeIterator colorNodes = colorsNode.Select("color");

                foreach (XPathNavigator colorNode in colorNodes)
                {
                    string pattern = colorNode.GetAttribute("pattern", String.Empty);
                    string region  = colorNode.GetAttribute("region", String.Empty);
                    string name    = colorNode.GetAttribute("class", String.Empty);

                    if (String.IsNullOrEmpty(region))
                    {
                        rules.Add(new ColorizationRule(pattern, name));
                    }
                    else
                    {
                        rules.Add(new ColorizationRule(pattern, region, name));
                    }
                }

                colorization[language] = rules;
                WriteMessage(MessageLevel.Info, "Loaded {0} colorization rules for the language '{1}'.", rules.Count, language);
            }

            CustomContext context = new CustomContext();

            context.AddNamespace("ddue", "http://ddue.schemas.microsoft.com/authoring/2003/5");

            selector = XPathExpression.Compile("//ddue:codeReference");
            selector.SetContext(context);
        }
        public List <Knowledge> Search(string input)
        {
            List <Knowledge> searchResult = new List <Knowledge>();
            var webRoot = _env.WebRootPath;

            var schemaSet = new XmlSchemaSet();
            var xsdFile   = System.IO.Path.Combine(webRoot, "Knowledgebase.xsd");

            using (System.IO.FileStream stream = File.OpenRead(xsdFile))
            {
                schemaSet.Add(XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                }));
            }

            XmlReaderSettings settings = new XmlReaderSettings();

            settings.ValidationType = ValidationType.Schema;
            settings.Schemas        = schemaSet;
            settings.DtdProcessing  = DtdProcessing.Parse;

            var file = System.IO.Path.Combine(webRoot, "Knowledgebase.xml");

            XmlReader   reader = XmlReader.Create(file, settings);
            XmlDocument xmlDoc = new XmlDocument()
            {
                XmlResolver = null
            };

            xmlDoc.Load(reader);

            XPathNavigator  nav  = xmlDoc.CreateNavigator();
            XPathExpression expr = nav.Compile(@"//knowledge[tags[contains(text(),$input)] and sensitivity/text()='Public']");

            XsltArgumentList varList = new XsltArgumentList();

            varList.AddParam("input", string.Empty, input);

            CustomContext context = new CustomContext(new NameTable(), varList);

            expr.SetContext(context);

            var matchedNodes = nav.Select(expr);

            foreach (XPathNavigator node in matchedNodes)
            {
                searchResult.Add(new Knowledge()
                {
                    Topic = node.SelectSingleNode(nav.Compile("topic")).Value, Description = node.SelectSingleNode(nav.Compile("description")).Value
                });
            }

            return(searchResult);
        }
コード例 #26
0
        // Select a list of nodes matching a particular XPath expression.
        public XmlNodeList SelectNodes(String xpath, XmlNamespaceManager nsmgr)
        {
            XPathNavigator  nav  = CreateNavigator();
            XPathExpression expr = nav.Compile(xpath);

            if (nsmgr != null)
            {
                expr.SetContext(nsmgr);
            }
            return(new SelectNodeList(nav.Select(expr)));
        }
コード例 #27
0
        public XPathExpression GetTargetExpression(XPathNavigator targetDoc, string key)
        {
            if (target == null)
            {
                XPathExpression keyedTargetExpression = targetDoc.Compile(string.Format(targetXPath, key));
                keyedTargetExpression.SetContext(namespaceMgr);
                return(keyedTargetExpression);
            }

            return(target);
        }
コード例 #28
0
        /// <summary>
        /// Selects a node set using the specified XPath expression.
        /// </summary>
        public static XPathNodeIterator SelectSorted(string expression, XPathNavigator source,
                                                     object sortExpression, IComparer comparer,
                                                     XmlPrefix[] prefixes, params XPathVariable[] variables)
        {
            XPathExpression     expr = GetCompiledExpression(expression, source);
            XmlNamespaceManager ctx  = PrepareContext(source, null, prefixes, variables);

            expr.SetContext(ctx);
            PrepareSort(expr, source, sortExpression, comparer, ctx);
            return(source.Select(expr));
        }
コード例 #29
0
ファイル: processor.cs プロジェクト: ydunk/masters
        internal XPathExpression GetValueQuery(int key)
        {
            Debug.Assert(key != Compiler.InvalidQueryKey);
            Debug.Assert(this.queryStore[key] is TheQuery);
            TheQuery           theQuery = (TheQuery)this.queryStore[key];
            XPathExpression    expr     = this.queryList[key];
            XsltCompileContext context  = new XsltCompileContext(theQuery._ScopeManager, this);

            expr.SetContext(context);
            return(expr);
        }
コード例 #30
0
        public List <string> CreateKey(XPathNavigator nav,
                                       XmlNamespaceManager nsmgr,
                                       string strXPath)
        {
            List <string> aKey = new List <string>();

            XPathExpression expr = nav.Compile(strXPath);

            expr.SetContext(nsmgr);

            string keystring = "";

            if (expr.ReturnType == XPathResultType.Number)
            {
                keystring = nav.Evaluate(expr).ToString();//Convert.ToString((int)(nav.Evaluate(expr)));
                aKey.Add(keystring);
            }
            else if (expr.ReturnType == XPathResultType.Boolean)
            {
                keystring = Convert.ToString((bool)(nav.Evaluate(expr)));
                aKey.Add(keystring);
            }
            else if (expr.ReturnType == XPathResultType.String)
            {
                keystring = (string)(nav.Evaluate(expr));
                aKey.Add(keystring);
            }
            else if (expr.ReturnType == XPathResultType.NodeSet)
            {
                XPathNodeIterator iterator = null;
                iterator = nav.Select(expr);

                if (iterator != null)
                {
                    while (iterator.MoveNext())
                    {
                        XPathNavigator navigator = iterator.Current;
                        keystring = navigator.Value;
                        if (keystring == "")
                        {
                            continue;
                        }

                        aKey.Add(keystring);
                    }
                }
            }
            else
            {
                throw new Exception("XPathExpression的ReturnType为'" + expr.ReturnType.ToString() + "'无效");
            }

            return(aKey);
        }