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