Пример #1
0
        public static string ToString(this INode node, NodeStringType type = NodeStringType.BBCode)
        {
            if (node is IPlainTextNode)
                return (node as IPlainTextNode).Text;

            StringBuilder build = new StringBuilder();
            if (type == NodeStringType.BBCode)
            {
                build.Append('[');
                build.Append(node.GetName());

                if (node is IAttributeNode && !string.IsNullOrEmpty((node as IAttributeNode).Attribute))
                {
                    build.Append('=');
                    build.Append((node as IAttributeNode).Attribute);
                }

                build.Append(']');
            }

            var extMethod = typeof(INodeExtensions).GetMethod($"To{type}", BindingFlags.Static, Type.DefaultBinder, CallingConventions.Any, new Type[] { node.GetType() }, null);
            if (extMethod != null)
                build.Append(extMethod.Invoke(null, new[] { node }) as string);
            else if (node is ITextNode)
                build.Append((node as ITextNode).Text);
            else if (node is IContentNode)
            {
                foreach (var child in (node as IContentNode).Content)
                    build.Append(child.ToString(type));
            }
            else
                return build.ToString();

            if (type == NodeStringType.BBCode)
            {
                build.Append("[/");
                build.Append(node.GetName());
                build.Append(']');
            }

            return build.ToString();
        }
Пример #2
0
 public static string ToString(this IEnumerable<INode> nodes, NodeStringType type = NodeStringType.BBCode)
 {
     return string.Join(" ", nodes.Select(n => n.ToString(type)).ToArray());
 }