Beispiel #1
0
 public frmEditTag(SetTag set_tag, CheckDuplicateTag check_tag, bool edit)
 {
     InitializeComponent();
     this.isEdit             = edit;
     this.delgSetTag         = set_tag;
     this.delgCheckDuplicate = check_tag;
 }
        public bool Equals(ContentPreview input)
        {
            if (input == null)
            {
                return(false);
            }

            return
                ((
                     Name == input.Name ||
                     (Name != null && Name.Equals(input.Name))
                     ) &&
                 (
                     Path == input.Path ||
                     (Path != null && Path.Equals(input.Path))
                 ) &&
                 (
                     ItemInSet == input.ItemInSet ||
                     (ItemInSet != null && ItemInSet.Equals(input.ItemInSet))
                 ) &&
                 (
                     SetTag == input.SetTag ||
                     (SetTag != null && SetTag.Equals(input.SetTag))
                 ) &&
                 (
                     SetNesting == input.SetNesting ||
                     (SetNesting.Equals(input.SetNesting))
                 ) &&
                 (
                     UseSetId == input.UseSetId ||
                     (UseSetId.Equals(input.UseSetId))
                 ));
        }
Beispiel #3
0
 public frmEditTag(SetTag set_tag, cls_Tag tag)
 {
     InitializeComponent();
     this.isEdit     = true;
     this.tag_data   = tag;
     this.delgSetTag = set_tag;
     //this.delgCheckDuplicate = check_tag;
 }
Beispiel #4
0
        /// <summary>
        /// 分析标签
        /// </summary>
        /// <param name="parser">TemplateParser</param>
        /// <param name="tc">Token集合</param>
        /// <returns></returns>
        public Tag Parse(TemplateParser parser, TokenCollection tc)
        {
            //支持写法:简写格式:
            //常规格式:
            if (tc.Count > 5 &&
                Common.ParserHelpers.IsEqual(tc.First.Text, Field.KEY_SET) &&
                tc[1].TokenKind == TokenKind.LeftParentheses &&
                tc[3].Text == "=" &&
                tc.Last.TokenKind == TokenKind.RightParentheses)
            {
                SetTag tag = new SetTag();
                tag.Name = tc[2].Text;

                TokenCollection coll = new TokenCollection();
                coll.Add(tc, 4, tc.Count - 2);

                tag.Value = parser.Read(coll);
                return(tag);
            }
            else if (tc.Count == 2 &&
                     tc.First.TokenKind == TokenKind.TextData &&
                     tc.Last.TokenKind == TokenKind.Operator &&
                     (tc.Last.Text == "++" || tc.Last.Text == "--"))
            {
                SetTag tag = new SetTag();
                tag.Name = tc.First.Text;

                ExpressionTag c = new ExpressionTag();
                c.AddChild(new VariableTag()
                {
                    FirstToken = tc.First,
                    Name       = tc.First.Text
                });
                c.AddChild(new TextTag()
                {
                    FirstToken = new Token(TokenKind.Operator, tc.Last.Text[0].ToString())
                });
                c.AddChild(new NumberTag()
                {
                    Value      = 1,
                    FirstToken = new Token(TokenKind.Number, "1")
                });

                tag.Value = c;
                return(tag);
            }
            else if (tc.Count > 2 &&
                     tc.First.TokenKind == TokenKind.TextData &&
                     tc[1].Text == "=")
            {
                SetTag tag = new SetTag();
                tag.Name = tc.First.Text;

                TokenCollection coll = new TokenCollection();
                coll.Add(tc, 2, tc.Count - 1);

                tag.Value = parser.Read(coll);
                return(tag);
            }

            return(null);
        }
Beispiel #5
0
        /// <summary>
        /// 分析标签
        /// </summary>
        /// <param name="parser">TemplateParser</param>
        /// <param name="tc">Token集合</param>
        /// <returns></returns>
        public ITag Parse(TemplateParser parser, TokenCollection tc)
        {
            if (tc == null ||
                parser == null)
            {
                return(null);
            }

            //支持写法:简写格式:
            //常规格式:
            if (tc.Count > 5 &&
                Utility.IsEqual(tc.First.Text, Field.KEY_SET) &&
                tc[1].TokenKind == TokenKind.LeftParentheses &&
                tc[3].Text == "=" &&
                tc.Last.TokenKind == TokenKind.RightParentheses)
            {
                SetTag tag = new SetTag();
                tag.Name = tc[2].Text;

                tag.Value = parser.Read(tc[4, -1]);
                return(tag);
            }

            if (tc.Count == 2 &&
                tc.First.TokenKind == TokenKind.TextData &&
                tc.Last.TokenKind == TokenKind.Operator &&
                (tc.Last.Text == "++" || tc.Last.Text == "--"))
            {
                SetTag tag = new SetTag();
                tag.Name = tc.First.Text;

                var c = new ArithmeticTag();
                c.AddChild(new VariableTag()
                {
                    FirstToken = tc.First,
                    Name       = tc.First.Text
                });
                c.AddChild(new OperatorTag(new Token(TokenKind.Operator, tc.Last.Text[0].ToString())));

                //c.AddChild(new TextTag()
                //{
                //    FirstToken = new Token(TokenKind.Operator, tc.Last.Text[0].ToString())
                //});

                c.AddChild(new NumberTag()
                {
                    Value      = 1,
                    FirstToken = new Token(TokenKind.Number, "1")
                });

                tag.Value = c;
                return(tag);
            }

            if (tc.Count > 2 &&
                tc.First.TokenKind == TokenKind.TextData &&
                tc[1].Text == "=")
            {
                SetTag tag = new SetTag();
                tag.Name  = tc.First.Text;
                tag.Value = parser.Read(tc[2, tc.Count]);
                return(tag);
            }

            return(null);
        }
Beispiel #6
0
        public static bool IsGoatFormat(string SetTagsStr)
        {
            if (SetTagsStr == null)
            {
                return(false);
            }

            List <string> SetTags     = SetTagsStr.Split(',').ToList();
            List <string> GoatSetTags = new List <string>();

            GoatSetTags.Add("LOB");
            GoatSetTags.Add("MRD");
            GoatSetTags.Add("SRL");
            GoatSetTags.Add("MRL");
            GoatSetTags.Add("PSV");
            GoatSetTags.Add("LON");
            GoatSetTags.Add("LOD");
            GoatSetTags.Add("PGD");
            GoatSetTags.Add("MFC");
            GoatSetTags.Add("DCR");
            GoatSetTags.Add("IOC");
            GoatSetTags.Add("AST");
            GoatSetTags.Add("SOD");
            GoatSetTags.Add("RDS");
            GoatSetTags.Add("FET");
            GoatSetTags.Add("DB1");
            GoatSetTags.Add("DB2");
            GoatSetTags.Add("DR1");
            GoatSetTags.Add("TP1");
            GoatSetTags.Add("TP2");
            GoatSetTags.Add("TP3");
            GoatSetTags.Add("TP4");
            GoatSetTags.Add("TP5");
            GoatSetTags.Add("TP6");
            GoatSetTags.Add("BPT");
            GoatSetTags.Add("BPT");
            GoatSetTags.Add("CT1");
            GoatSetTags.Add("DDS");
            GoatSetTags.Add("FMR");
            GoatSetTags.Add("EDS");
            GoatSetTags.Add("DOR");
            GoatSetTags.Add("SDD");
            GoatSetTags.Add("PCY");
            GoatSetTags.Add("TFK");
            GoatSetTags.Add("TSC");
            GoatSetTags.Add("WC4");
            GoatSetTags.Add("DOD");
            GoatSetTags.Add("PCK");
            GoatSetTags.Add("ROD");
            GoatSetTags.Add("PCJ");
            GoatSetTags.Add("DBT");
            GoatSetTags.Add("CMC");
            GoatSetTags.Add("WC5");
            GoatSetTags.Add("MP1");
            GoatSetTags.Add("MOV");
            GoatSetTags.Add("SP1-EN001");
            GoatSetTags.Add("SP1-EN002");
            GoatSetTags.Add("SDY");
            GoatSetTags.Add("SDK");
            GoatSetTags.Add("SDJ");
            GoatSetTags.Add("SDP");
            GoatSetTags.Add("SYE");
            GoatSetTags.Add("SKE");
            GoatSetTags.Add("SD1");
            GoatSetTags.Add("SD2");
            GoatSetTags.Add("SD3");
            GoatSetTags.Add("SD4");
            GoatSetTags.Add("EP1");

            foreach (var SetTag in SetTags)
            {
                foreach (var GoatSetTag in GoatSetTags)
                {
                    if ((SetTag.Length > GoatSetTag.Length && SetTag.StartsWith(GoatSetTag) && SetTag[GoatSetTag.Length] == '-') || SetTag == GoatSetTag)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Beispiel #7
0
        /// <summary>
        /// Recursively evaluates the template nodes returned from the bot
        /// </summary>
        /// <param name="node">the node to evaluate</param>
        /// <param name="request">the request from the user</param>
        /// <param name="result">the result to be sent to the user</param>
        /// <param name="user">the user who originated the request</param>
        /// <returns>the output string</returns>
        private string ProcessNode(XmlNode node, Request request, Result result, User user)
        {
            StringBuilder newInnerText = new StringBuilder();

            if (node.HasChildNodes)
            {
                // recursively check
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    childNode.InnerText = this.ProcessNode(childNode, request, result, user);
                }
            }

            // process the node itself
            AIMLTagHandler tagHandler = null;

            switch (node.Name.ToLower())
            {
            case "bot":
                tagHandler = new BotTag(this, user, request, result, node);
                break;

            case "condition":
                tagHandler = new ConditionTag(this, user, request, result, node);
                break;

            case "date":
                tagHandler = new DateTag(this, user, request, result, node);
                break;

            case "formal":
                tagHandler = new FormalTag(this, user, request, result, node);
                break;

            case "gender":
                tagHandler = new GenderTag(this, user, request, result, node);
                break;

            case "get":
                tagHandler = new GetTag(this, user, request, result, node);
                break;

            case "gossip":
                tagHandler = new GossipTag(this, user, request, result, node);
                break;

            case "id":
                tagHandler = new IdTag(this, user, request, result, node);
                break;

            case "input":
                tagHandler = new InputTag(this, user, request, result, node);
                break;

            case "javascript":
                tagHandler = new JavascriptTag(this, user, request, result, node);
                break;

            case "learn":
                tagHandler = new LearnTag(this, user, request, result, node);
                break;

            case "lowercase":
                tagHandler = new LowercaseTag(this, user, request, result, node);
                break;

            case "person":
                tagHandler = new PersonTag(this, user, request, result, node);
                break;

            case "person2":
                tagHandler = new Person2Tag(this, user, request, result, node);
                break;

            case "random":
                tagHandler = new RandomTag(this, user, request, result, node);
                break;

            case "sentence":
                tagHandler = new SentenceTag(this, user, request, result, node);
                break;

            case "set":
                tagHandler = new SetTag(this, user, request, result, node);
                break;

            case "size":
                tagHandler = new SizeTag(this, user, request, result, node);
                break;

            case "sr":
                tagHandler = new SrTag(this, user, request, result, node);
                break;

            case "srai":
                tagHandler = new SraiTag(this, user, request, result, node);
                break;

            case "star":
                tagHandler = new StarTag(this, user, request, result, node);
                break;

            case "system":
                tagHandler = new SystemTag(this, user, request, result, node);
                break;

            case "that":
                tagHandler = new ThatTag(this, user, request, result, node);
                break;

            case "thatstar":
                tagHandler = new ThatStarTag(this, user, request, result, node);
                break;

            case "think":
                tagHandler = new ThinkTag(this, user, request, result, node);
                break;

            case "topicstar":
                tagHandler = new TopicStarTag(this, user, request, result, node);
                break;

            case "uppercase":
                tagHandler = new UppercaseTag(this, user, request, result, node);
                break;

            case "version":
                tagHandler = new VersionTag(this, user, request, result, node);
                break;

            default:
                tagHandler = this.GetBespokeTags(user, request, result, node);
                break;
            }
            if (object.Equals(null, tagHandler))
            {
                return(node.InnerText);
            }
            else
            {
                return(tagHandler.Transform());
            }
        }
Beispiel #8
0
        public Tag Parse(TemplateParser parser, TokenCollection tc)
        {
            if (ParserHelpers.IsEqual(tc.First.Text, Field.KEY_ARRAY))
            {
                if (tc.Count > 2 &&
                    (tc[1].TokenKind == TokenKind.LeftParentheses) &&
                    tc.Last.TokenKind == TokenKind.RightParentheses)
                {
                    int               pos   = 0;
                    int               begin = 2;
                    int               end;
                    Tag               tmp;
                    ArrayTag          tag  = new ArrayTag();
                    Stack <TokenKind> last = new Stack <TokenKind>();
                    for (int i = 2; i < tc.Count; ++i)
                    {
                        if ((tc[i].TokenKind == TokenKind.Comma && last.Count == 0) || i == (tc.Count - 1))
                        {
                            end = i - 1;
                            tmp = parser.Read(new TokenCollection(tc, begin, end));
                            if (tmp is ExpressionTag || tmp is SetTag)
                            {
                                if (tmp is SetTag)
                                {
                                    SetTag      set = (SetTag)tmp;
                                    VariableTag var = new VariableTag();
                                    var.Name = set.Name;
                                    object val = var.Parse(parser.Context);
                                    if (val != null)
                                    {
                                        if (val is string)
                                        {
                                            tag.Set((string)val, set.Value, parser.Context);
                                        }
                                        else if (VariableTag.IsNumber(val))
                                        {
                                            tag.Set((int)val, set.Value, parser.Context);
                                        }
                                        else
                                        {
                                            throw new ParseException(string.Concat("array key type is error:", tc), parser.Context.CurrentPath, tc.First.BeginLine, tc.First.BeginColumn);
                                        }
                                    }
                                    else
                                    {
                                        throw new ParseException(string.Concat("array key is null referer:", tc), parser.Context.CurrentPath, tc.First.BeginLine, tc.First.BeginColumn);
                                    }
                                }
                                else if (tmp.Children[0] is StringTag)
                                {
                                    tag.Set(((StringTag)tmp.Children[0]).Value, tmp.Children[2], parser.Context);
                                }
                                else if (tmp.Children[0] is NumberTag)
                                {
                                    tag.Set((int)((NumberTag)tmp.Children[0]).Value, tmp.Children[2], parser.Context);
                                }
                                else
                                {
                                    throw new ParseException(string.Concat("array key type is error:", tc), parser.Context.CurrentPath, tc.First.BeginLine, tc.First.BeginColumn);
                                }
                            }
                            else
                            {
                                tag.Set(pos, tmp, parser.Context);
                                ++pos;
                            }
                            begin = i + 1;
                        }
                        else if (tc[i].TokenKind == TokenKind.StringStart)
                        {
                            last.Push(TokenKind.StringStart);
                        }
                        else if (tc[i].TokenKind == TokenKind.LeftParentheses)
                        {
                            last.Push(TokenKind.LeftParentheses);
                        }
                        else if (tc[i].TokenKind == TokenKind.StringEnd && last.Peek() == TokenKind.StringStart)
                        {
                            last.Pop();
                        }
                        else if (tc[i].TokenKind == TokenKind.RightParentheses && last.Peek() == TokenKind.LeftParentheses)
                        {
                            last.Pop();
                        }
                    }
                    return(tag);
                }
            }

            return(null);
        }
Beispiel #9
0
        public static ITag LoadTag(XmlNode xmlNode, IList <Include> includes)
        {
            ITag tag          = null;
            bool isIn         = !string.IsNullOrEmpty(xmlNode.GetValueInXmlAttributes("In"));
            var  prepend      = xmlNode.GetValueInXmlAttributes("Prepend");
            var  property     = xmlNode.GetValueInXmlAttributes("Property");
            var  compareValue = xmlNode.GetValueInXmlAttributes("CompareValue");

            #region Init Tag
            string lowerXmlNodeName = xmlNode.Name.ToLower();
            switch (lowerXmlNodeName)
            {
            case "#text":
            case "#cdata-section":
            {
                var bodyText = " " + xmlNode.GetInnerTextInXmlAttributes();
                return(new SqlText
                    {
                        BodyText = bodyText
                    });
            }

            //case "OrderBy":
            case "orderby":
            {
                var bodyText = " " + xmlNode.GetInnerTextInXmlAttributes();
                tag = new OrderBy
                {
                    ChildTags = new List <ITag>(),

                    BodyText = bodyText
                };
                break;
            }

            //case "Include":
            case "include":
            {
                var refId       = xmlNode.GetValueInXmlAttributes("RefId");
                var include_tag = new Include
                {
                    RefId = refId
                };
                includes.Add(include_tag);
                tag = include_tag;
                break;
            }

            //case "If":
            case "if":
            {
                var Test = xmlNode.GetValueInXmlAttributes("Test");
                tag = new IfTag
                {
                    Test      = Test,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsEmpty":
            case "isempty":
            {
                tag = new IsEmpty
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsEqual":
            case "isequal":
            {
                tag = new IsEqual
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsGreaterEqual":
            case "isgreaterequal":
            {
                tag = new IsGreaterEqual
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsGreaterThan":
            case "isgreaterthan":
            {
                tag = new IsGreaterThan
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsLessEqual":
            case "islessequal":
            {
                tag = new IsLessEqual
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsLessThan":
            case "islessthan":
            {
                tag = new IsLessThan
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsNotEmpty":
            case "isnotempty":
            {
                tag = new IsNotEmpty
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsNotEqual":
            case "isnotequal":
            {
                tag = new IsNotEqual
                {
                    In           = isIn,
                    Prepend      = prepend,
                    Property     = property,
                    CompareValue = compareValue,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "IsNotNull":
            case "isnotnull":
            {
                tag = new IsNotNull
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsNull":
            case "isnull":
            {
                tag = new IsNull
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsTrue":
            case "istrue":
            {
                tag = new IsTrue
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsFalse":
            case "isfalse":
            {
                tag = new IsFalse
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "IsProperty":
            case "isproperty":
            {
                tag = new IsProperty
                {
                    In        = isIn,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Switch":
            case "switch":
            {
                tag = new Switch
                {
                    Property = property,
                    //Prepend = prepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Case":
            case "case":
            {
                var switchNode     = xmlNode.ParentNode;
                var switchProperty = switchNode.GetValueInXmlAttributes("Property");
                var switchPrepend  = switchNode.GetValueInXmlAttributes("Prepend");
                tag = new Switch.Case
                {
                    CompareValue = compareValue,
                    Property     = switchProperty,
                    Prepend      = switchPrepend,
                    ChildTags    = new List <ITag>()
                };
                break;
            }

            //case "Default":
            case "default":
            {
                var switchNode     = xmlNode.ParentNode;
                var switchProperty = switchNode.GetValueInXmlAttributes("Property");
                var switchPrepend  = switchNode.GetValueInXmlAttributes("Prepend");
                tag = new Switch.Defalut
                {
                    Property  = switchProperty,
                    Prepend   = switchPrepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Choose":
            case "choose":
            {
                tag = new ChooseTag
                {
                    //Property = property,
                    //Prepend = prepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            case "when":
            {
                var Test = xmlNode.GetValueInXmlAttributes("Test");
                //var switchNode = xmlNode.ParentNode;
                //var switchProperty = switchNode.GetValueInXmlAttributes("Property");
                //var switchPrepend = switchNode.GetValueInXmlAttributes("Prepend");
                tag = new ChooseTag.ChooseWhenTag
                {
                    Test = Test,
                    //Property = switchProperty,
                    //Prepend = switchPrepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            case "otherwise":
            {
                //var switchNode = xmlNode.ParentNode;
                //var switchProperty = switchNode.GetValueInXmlAttributes("Property");
                //var switchPrepend = switchNode.GetValueInXmlAttributes("Prepend");
                tag = new ChooseTag.ChooseOtherwiseTag
                {
                    //Property = switchProperty,
                    //Prepend = switchPrepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            case "trim":
            {
                var Prefix          = xmlNode.GetValueInXmlAttributes("Prefix", "", false);
                var Suffix          = xmlNode.GetValueInXmlAttributes("Suffix", "", false);
                var PrefixOverrides = xmlNode.GetValueInXmlAttributes("PrefixOverrides");
                var SuffixOverrides = xmlNode.GetValueInXmlAttributes("SuffixOverrides");
                tag = new TrimTag
                {
                    Prefix          = Prefix,
                    Suffix          = Suffix,
                    PrefixOverrides = PrefixOverrides,
                    SuffixOverrides = SuffixOverrides,
                    ChildTags       = new List <ITag>()
                };
                break;
            }

            case "set":
            {
                tag = new SetTag()
                {
                    ChildTags = new List <ITag>()
                };
                break;
            }

            case "where":
            {
                tag = new WhereTag
                {
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Where":
            //case "where":
            //    {
            //        tag = new Where
            //        {
            //            ChildTags = new List<ITag>()
            //        };
            //        break;
            //    }
            //case "Dynamic":
            case "dynamic":
            {
                tag = new Dynamic
                {
                    Prepend   = prepend,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Variable":
            case "variable":
            {
                var bodyText = xmlNode.GetInnerTextInXmlAttributes();
                tag = new Variable
                {
                    BodyText  = bodyText,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Bind":
            case "bind":
            {
                var Name  = xmlNode.GetValueInXmlAttributes("Name");
                var Value = xmlNode.GetValueInXmlAttributes("Value");
                //var bodyText = xmlNode.GetInnerTextInXmlAttributes();
                tag = new BindTag
                {
                    Name      = Name,
                    Value     = Value,
                    Prepend   = prepend,
                    Property  = property,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Foreach":
            case "foreach":
            {
                var open      = xmlNode.GetValueInXmlAttributes("Open");
                var separator = xmlNode.GetValueInXmlAttributes("Separator");
                var close     = xmlNode.GetValueInXmlAttributes("Close");
                var item      = xmlNode.GetValueInXmlAttributes("Item");
                var index     = xmlNode.GetValueInXmlAttributes("Index");
                tag = new Foreach
                {
                    Prepend   = prepend,
                    Property  = property,
                    Open      = open,
                    Close     = close,
                    Separator = separator,
                    Item      = item,
                    Index     = index,
                    ChildTags = new List <ITag>()
                };
                break;
            }

            //case "Env":
            case "env":
            {
                var dbProvider = xmlNode.GetValueInXmlAttributes("DbProvider");
                var DbType     = xmlNode.GetValueInXmlAttributes("DbType");
                tag = new Env
                {
                    Prepend    = prepend,
                    DbProvider = dbProvider,
                    DbType     = DbType,
                    ChildTags  = new List <ITag>()
                };
                break;
            }

            case "#comment": { break; }

            default:
            {
                throw new Exception(string.Format("Statement.LoadTag unkonw tagName:{0}.", xmlNode.Name));
            };
            }
            #endregion
            //加载组合查询条件查询
            foreach (XmlNode childNode in xmlNode)
            {
                ITag childTag = LoadTag(childNode, includes);
                if (childTag != null && tag != null)
                {
                    (tag as Tag).ChildTags.Add(childTag);
                }
            }
            return(tag);
        }