Exemple #1
0
        protected virtual string GetLabel(XmlNode start)
        {
            var label   = start.Name;           // a default.
            var target  = GetTargetNode(start);
            var current = target;

            while (current != null)
            {
                if (MergeStrategies != null)
                {
                    var strategy = current.Name == SharedConstants.Ownseq
                                                ? GetOwnSeqStrategy(current)
                                                : MergeStrategies.GetElementStrategy(current);
                    if (strategy != null &&
                        strategy.ContextDescriptorGenerator is FieldWorkObjectContextGenerator &&
                        strategy.ContextDescriptorGenerator != this)
                    {
                        var result = ((FieldWorkObjectContextGenerator)strategy.ContextDescriptorGenerator).GetLabel(current);
                        return(result + GetPathAppend(current, target));
                    }
                }
                if (current.ParentNode == null || current.ParentNode == current.OwnerDocument)
                {
                    // some top-level node we don't have a specialized strategy for. This is better than nothing.
                    return(current.Name + GetPathAppend(current, target));
                }
                current = current.ParentNode;
            }
            return(label);
        }