private void HandleBuildXpathFromStartMessage(BuildXPathFromStartMessage message) { var startOfXPath = this.GetStartOfXPath(); if (startOfXPath == null) { return; } var startElementAncestors = GetOrderedAncestorsFromElementToRoot(startOfXPath); var currentElementAncestors = GetOrderedAncestorsFromElementToRoot(message.Element); ElementViewModel commonAncestor = null; foreach (var startElementAncestor in startElementAncestors) { foreach (var currentElementAncestor in currentElementAncestors) { if (currentElementAncestor != startElementAncestor) { continue; } commonAncestor = startElementAncestor; break; } if (commonAncestor != null) { break; } } var numberOfElementsUpTheAncestorChainFromStart = startElementAncestors.IndexOf(commonAncestor); var numberOfElementsUpTheAncestorChainFromCurrent = currentElementAncestors.IndexOf(commonAncestor); var prefix = string.Concat(Enumerable.Repeat(@"../", numberOfElementsUpTheAncestorChainFromStart)); var postfix = string.Join(@"/", currentElementAncestors.Take(numberOfElementsUpTheAncestorChainFromCurrent).Select(x => x.Name).Reverse().ToArray()); var fullXpath = prefix + postfix; SendOutputBasedOnTarget(fullXpath, message.OutputTarget); }
private void HandleBuildXpathFromStartMessage(BuildXPathFromStartMessage message) { var startOfXPath = this.GetStartOfXPath(); if (startOfXPath == null) return; var startElementAncestors = GetOrderedAncestorsFromElementToRoot(startOfXPath); var currentElementAncestors = GetOrderedAncestorsFromElementToRoot(message.Element); ElementViewModel commonAncestor = null; foreach (var startElementAncestor in startElementAncestors) { foreach (var currentElementAncestor in currentElementAncestors) { if (currentElementAncestor != startElementAncestor) continue; commonAncestor = startElementAncestor; break; } if (commonAncestor != null) break; } var numberOfElementsUpTheAncestorChainFromStart = startElementAncestors.IndexOf(commonAncestor); var numberOfElementsUpTheAncestorChainFromCurrent = currentElementAncestors.IndexOf(commonAncestor); var prefix = string.Concat(Enumerable.Repeat(@"../", numberOfElementsUpTheAncestorChainFromStart)); var postfix = string.Join(@"/", currentElementAncestors.Take(numberOfElementsUpTheAncestorChainFromCurrent).Select(x => x.Name).Reverse().ToArray()); var fullXpath = prefix + postfix; SendOutputBasedOnTarget(fullXpath, message.OutputTarget); }