コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }