/// <summary> /// Gets the universities based on a US State /// </summary> /// <param name="state">Either the name or the postal code.</param> /// <returns></returns> public static AmericanUniversity[] GetUniversitiesByState(string state) { UnivXml = UnivXml ?? Core.XmlDocXrefIdentifier.GetEmbeddedXmlDoc(US_UNIVERSITY_DATA, Assembly.GetExecutingAssembly()); //this will never pass so avoid the exception if (UnivXml == null) { return new AmericanUniversity[] { } } ; if (String.IsNullOrWhiteSpace(state)) { _allStateAbbreviations = _allStateAbbreviations ?? GetAllXmlStateAbbreviations(UnivXml); state = GetRandomStateAbbrev(_allStateAbbreviations); } var qryBy = "name"; if (state.Length == 2) { qryBy = "abbreviation"; } else { state = string.Join(" ", NfString.DistillToWholeWords(state)); } var elements = UnivXml.SelectSingleNode($"//state[@{qryBy}='{state}']"); if (elements == null || !elements.HasChildNodes) { return new AmericanUniversity[] { } } ; var tempList = new List <AmericanUniversity>(); foreach (var elem in elements) { if (TryParseXml(elem as XmlElement, out var univOut)) { univOut.StateName = state; tempList.Add(univOut); } } if (tempList.Count == 0) { return new AmericanUniversity[] { } } ; return(tempList.ToArray()); }
public static AmericanUniversity RandomUniversity(string state = null) { IUniversity univ = null; int pick; //pick a univ from the home state if (!string.IsNullOrWhiteSpace(state)) { var stateUnivs = GetUniversitiesByState(state); if (stateUnivs.Any()) { pick = Etx.RandomInteger(0, stateUnivs.Length - 1); univ = stateUnivs[pick]; } } if (univ == null) { //pick a university from anywhere in the US UnivXml = UnivXml ?? XmlDocXrefIdentifier.GetEmbeddedXmlDoc(US_UNIVERSITY_DATA, Assembly.GetExecutingAssembly()); var allUnivs = UnivXml?.SelectNodes("//state"); if (allUnivs == null) { return(null); } pick = Etx.RandomInteger(0, allUnivs.Count - 1); if (!(allUnivs[pick] is XmlElement randUnivXml) || !randUnivXml.HasChildNodes) { return(null); } pick = Etx.RandomInteger(0, randUnivXml.ChildNodes.Count - 1); if (!(randUnivXml.ChildNodes[pick] is XmlElement univXmlNode)) { return(null); } if (TryParseXml(univXmlNode, out var univOut)) { univ = univOut; } } return((AmericanUniversity)univ); }