public override string GetNodeXPath (XPathNavigator n)
{
if (n.Matches ("/Type/Docs/param")) {
string type_name = (string) n.Evaluate ("string (ancestor::Type/@FullName)");
string param_name = (string) n.Evaluate ("string (@name)");
return String.Format ("/Type [@FullName = '{0}']/Docs/param[@name='{1}']", type_name, param_name);
}
if (n.Matches ("/Type/Docs/*")) {
string type_name = (string) n.Evaluate ("string (ancestor::Type/@FullName)");
return String.Format ("/Type [@FullName = '{0}']/Docs/{1}", type_name, n.Name);
}
if (n.Matches ("/Type/Members/Member/Docs/*")) {
string type_name = (string) n.Evaluate ("string (ancestor::Type/@FullName)");
string member_name = (string) n.Evaluate ("string (ancestor::Member/@MemberName)");
string member_sig = (string) n.Evaluate ("string (ancestor::Member/MemberSignature [@Language='C#']/@Value)");
string param_name = (string) n.Evaluate ("string (@name)");
if (param_name == null || param_name == "") {
return String.Format (
"/Type [@FullName = '{0}']/Members/Member [@MemberName = '{1}'][MemberSignature [@Language='C#']/@Value = '{2}']/Docs/{3}",
type_name, member_name, member_sig, n.Name);
} else {
return String.Format (
"/Type [@FullName = '{0}']/Members/Member [@MemberName = '{1}'][MemberSignature [@Language='C#']/@Value = '{2}']/Docs/param [@name = '{3}']",
type_name, member_name, member_sig, param_name);
}
}
Message (TraceLevel.Warning, "WARNING: Was not able to get clean XPath expression for node {0}", EditingUtils.GetXPath (n));
return base.GetNodeXPath (n);
}