bool keep_include_node = false;
string file = el.GetAttribute ("file");
string path = el.GetAttribute ("path");
+
if (file == "") {
Report.Warning (1590, 1, mc.Location, "Invalid XML `include' element. Missing `file' attribute");
el.ParentNode.InsertBefore (el.OwnerDocument.CreateComment (" Include tag is invalid "), el);
keep_include_node = true;
- }
- else if (path.Length == 0) {
+ } else if (path.Length == 0) {
Report.Warning (1590, 1, mc.Location, "Invalid XML `include' element. Missing `path' attribute");
el.ParentNode.InsertBefore (el.OwnerDocument.CreateComment (" Include tag is invalid "), el);
keep_include_node = true;
- }
- else {
+ } else {
XmlDocument doc;
- if (!StoredDocuments.TryGetValue (file, out doc)) {
+ Exception exception = null;
+ var full_path = Path.Combine (Path.GetDirectoryName (mc.Location.NameFullPath), file);
+
+ if (!StoredDocuments.TryGetValue (full_path, out doc)) {
try {
doc = new XmlDocument ();
- doc.Load (file);
- StoredDocuments.Add (file, doc);
- } catch (Exception) {
+ doc.Load (full_path);
+ StoredDocuments.Add (full_path, doc);
+ } catch (Exception e) {
+ exception = e;
el.ParentNode.InsertBefore (el.OwnerDocument.CreateComment (String.Format (" Badly formed XML in at comment file `{0}': cannot be included ", file)), el);
- Report.Warning (1592, 1, mc.Location, "Badly formed XML in included comments file -- `{0}'", file);
}
}
+
if (doc != null) {
try {
XmlNodeList nl = doc.SelectNodes (path);
foreach (XmlNode n in nl)
el.ParentNode.InsertBefore (el.OwnerDocument.ImportNode (n, true), el);
} catch (Exception ex) {
+ exception = ex;
el.ParentNode.InsertBefore (el.OwnerDocument.CreateComment (" Failed to insert some or all of included XML "), el);
- Report.Warning (1589, 1, mc.Location, "Unable to include XML fragment `{0}' of file `{1}' ({2})", path, file, ex.Message);
}
}
+
+ if (exception != null) {
+ Report.Warning (1589, 1, mc.Location, "Unable to include XML fragment `{0}' of file `{1}'. {2}",
+ path, file, exception.Message);
+ }
}
+
return keep_include_node;
}
-<?xml version="1.0"?>\r
-<doc>\r
- <assembly>\r
- <name>test-xml-025</name>\r
- </assembly>\r
- <members>\r
- <member name="T:Testing.Test">\r
- <!-- No matching elements were found for the following include tag --><include file="test-xml-025.inc" path="/foo"/>\r
- </member>\r
- <member name="F:Testing.Test.S1">\r
- <root attr="is attribute allowed?">\r
- includes XML markup.\r
- <child>test</child>\r
- <child>test2</child>\r
-</root>\r
- </member>\r
- <member name="F:Testing.Test.S2">\r
- <child>test</child><child>test2</child>\r
- </member>\r
- <member name="F:Testing.Test.S3">\r
- <!-- Failed to insert some or all of included XML -->\r
- </member>\r
- </members>\r
-</doc>\r
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>test-xml-025</name>
+ </assembly>
+ <members>
+ <member name="T:Testing.Test">
+ <!-- No matching elements were found for the include tag embedded here. -->
+ <include file="test-xml-025.inc" path="/foo" />
+ </member>
+ <member name="F:Testing.Test.S1">
+ <root attr="is attribute allowed?">
+ includes XML markup.
+ <child>test</child><child>test2</child></root>
+ </member>
+ <member name="F:Testing.Test.S2">
+ <child>test</child>
+ <child>test2</child>
+ </member>
+ <member name="F:Testing.Test.S3">
+ <!-- Failed to insert some or all of included XML -->
+ </member>
+ <member name="M:RelativeTestPath.Foo">
+ <summary>
+ Implements more features
+ </summary>
+ <remarks name="Foo">
+ implements the method in the most beautiful way possible.
+</remarks>
+ </member>
+ </members>
+</doc>