private ListTemplateUserListsListMetaDataView[] ViewsRegexParse(string metadataSubstring)
        {
            var viewsSubstring = Regex.Match(metadataSubstring, "(?<=<Views>).*(?=</Views>)", RegexOptions.Singleline).Value;
            var viewSubstring  = Regex.Matches(viewsSubstring, "(?<=<View ).*(?=</View>)", RegexOptions.Singleline);
            //initialise required objects
            List <ListTemplateUserListsListMetaDataView> Views = new List <ListTemplateUserListsListMetaDataView>();
            ListTemplateUserListsListMetaDataView        view  = new ListTemplateUserListsListMetaDataView
            {
                Items = new ListTemplateUserListsListMetaDataViewViewFields[0],
            };

            var viewItems = new List <ListTemplateUserListsListMetaDataViewViewFields>();

            foreach (Match match in viewSubstring)
            {
                var viewitem = new ListTemplateUserListsListMetaDataViewViewFields();

                var viewName = Regex.Match(match.Value, "(?<=DisplayName=\").?([^\"]*)").Value;

                // narrow down to our view fields.
                var viewFields = Regex.Match(match.Value, "(?<=<ViewFields>).*(?=</ViewFields>)", RegexOptions.Singleline).Value;

                // get our fieldRefs
                var fieldRefGroups = Regex.Matches(viewFields, "<FieldRef\\b.*[>]", RegexOptions.Singleline |
                                                   RegexOptions.IgnorePatternWhitespace);

                var fieldRefList = new List <ListTemplateUserListsListMetaDataViewViewFieldsFieldRef>();

                foreach (Match field in fieldRefGroups)
                {
                    var fieldRef = new ListTemplateUserListsListMetaDataViewViewFieldsFieldRef
                    {
                        Name = field.Value
                    };
                    fieldRefList.Add(fieldRef);
                }

                viewitem.FieldRef = fieldRefList.ToArray();
                viewItems.Add(viewitem);
                view.Items       = viewItems.ToArray();
                view.DisplayName = viewName;
                Views.Add(view);
            }
            return(Views.ToArray());
        }
        private ListTemplateUserListsListMetaDataView[] ViewsNodeParse(XmlDocument doc)
        {
            try
            {
                // lets try and get the field nodes:
                XmlNodeList viewNodes = doc.SelectNodes(@"/ListTemplate/UserLists/List/MetaData/Views/View");
                List <ListTemplateUserListsListMetaDataView> views = new List <ListTemplateUserListsListMetaDataView>();
                foreach (XmlNode node in viewNodes)
                {
                    if (node.Name == "View")
                    {
                        var childNode  = node.SelectNodes(@"ViewFields");
                        var fieldNodes = childNode[0].SelectNodes(@"FieldRef");

                        var fieldRefList = new List <ListTemplateUserListsListMetaDataViewViewFieldsFieldRef>();

                        foreach (XmlNode field in fieldNodes)
                        {
                            var fieldRef = new ListTemplateUserListsListMetaDataViewViewFieldsFieldRef
                            {
                                Name = field.Attributes["Name"].Value
                            };
                            fieldRefList.Add(fieldRef);
                        }

                        views.Add(new ListTemplateUserListsListMetaDataView()
                        {
                            Name        = node.Attributes["Name"].Value,
                            DisplayName = node.Attributes["DisplayName"].Value,
                            Type        = node.Attributes["Type"].Value,
                            Items       = fieldRefList.ToArray()
                        });
                    }
                }
                return(views.ToArray());
            }
            catch
            {
                return(null);
            }
        }