diff --git a/ICD.Common.Utils/Xml/XmlReaderExtensions.cs b/ICD.Common.Utils/Xml/XmlReaderExtensions.cs
index 613a9c6..e7bd60f 100644
--- a/ICD.Common.Utils/Xml/XmlReaderExtensions.cs
+++ b/ICD.Common.Utils/Xml/XmlReaderExtensions.cs
@@ -115,7 +115,7 @@ namespace ICD.Common.Utils.Xml
///
///
[PublicAPI]
- public static void Recurse(this IcdXmlReader extends, Action callback)
+ public static void Recurse(this IcdXmlReader extends, Func callback)
{
if (extends == null)
throw new ArgumentNullException("extends");
diff --git a/ICD.Common.Utils/Xml/XmlUtils.cs b/ICD.Common.Utils/Xml/XmlUtils.cs
index 226bc1a..0f559f4 100644
--- a/ICD.Common.Utils/Xml/XmlUtils.cs
+++ b/ICD.Common.Utils/Xml/XmlUtils.cs
@@ -138,7 +138,7 @@ namespace ICD.Common.Utils.Xml
///
///
[PublicAPI]
- public static void Recurse(string xml, Action callback)
+ public static void Recurse(string xml, Func callback)
{
if (callback == null)
throw new ArgumentNullException("callback");
@@ -152,7 +152,7 @@ namespace ICD.Common.Utils.Xml
///
///
///
- private static void Recurse(string xml, Stack path, Action callback)
+ private static void Recurse(string xml, Stack path, Func callback)
{
if (path == null)
throw new ArgumentNullException("path");
@@ -168,10 +168,11 @@ namespace ICD.Common.Utils.Xml
path.Push(childReader.Name);
string[] pathOutput = path.Reverse().ToArray(path.Count);
- callback(new XmlRecursionEventArgs(xml, pathOutput));
-
- foreach (string child in childReader.GetChildElementsAsString())
- Recurse(child, path, callback);
+ if (callback(new XmlRecursionEventArgs(xml, pathOutput)))
+ {
+ foreach (string child in childReader.GetChildElementsAsString())
+ Recurse(child, path, callback);
+ }
path.Pop();
}