Esempio n. 1
0
        public void ParseRelationships()
        {
            var tokens = XPathToken.Parse("Relationships/Item[@type = 'File'][@id]").ToList();

            Assert.AreEqual(13, tokens.Count);
            Assert.AreEqual("Relationships", tokens[0].Value);
            Assert.AreEqual("Item", tokens[2].Value);
            Assert.IsTrue(tokens[4].TryGetAxis(out var axis1));
            Assert.AreEqual(XPathAxis.Attribute, axis1);
            Assert.IsTrue(tokens[7].TryGetString(out var str));
            Assert.AreEqual("File", str);
            Assert.IsTrue(tokens[10].TryGetAxis(out var axis2));
            Assert.AreEqual(XPathAxis.Attribute, axis2);
        }
Esempio n. 2
0
        private static OperationElement Parse(string methodName, IEnumerable <XElement> elements)
        {
            var method = new OperationElement
            {
                Name = methodName
            };
            var builder = new StringBuilder();

            method.Summary.AddRange(elements
                                    .Where(e => e.Name.LocalName == "summary")
                                    .SelectMany(e => ParseDoc(e.Nodes())));

            foreach (var elem in elements.Where(e => e.Name.LocalName == "inheritdoc"))
            {
                if (Standard.TryGetValue((string)elem.Attribute("cref"), out var doc))
                {
                    method.WithAttributes(doc.Attributes);
                    method.WithElements(doc.Elements.ToArray());
                    if (method.Summary.Count < 1 && doc.Summary.Count > 0)
                    {
                        method.Summary.AddRange(doc.Summary);
                    }
                }
            }

            foreach (var elem in elements.Where(e => e.Name.LocalName == "param"))
            {
                var xPath = new List <XPathToken>();

                try
                {
                    xPath = XPathToken.Parse((string)elem.Attribute("name")).ToList();
                }
                catch (Exception) { }

                var stack = new Stack <OperationElement>();
                stack.Push(method);
                var idx = 0;

                while (idx < xPath.Count)
                {
                    if (xPath[idx].TryGetAxis(out var axis) && axis == XPathAxis.Attribute && idx + 1 < xPath.Count)
                    {
                        var attrDoc = stack.Peek().GetOrAddAttribute(xPath[idx + 1].Value);
                        stack.Push(attrDoc);
                        idx++;
                    }