public System.Collections.ArrayList DoSearchEx(string url, string terms) { struct_Records st_Recs = new struct_Records(); string escaped_terms = System.Uri.EscapeDataString(terms); url = url.Replace("{terms}", escaped_terms); string xml = helpers.MakeOpenHTTPRequest(url, SetProxy, "GET"); if (xml == null || xml == "") { return null; } else { return Process_SRU(xml); } }
private System.Collections.ArrayList Process_SRU(string xml) { System.Xml.XmlTextReader rd; System.Collections.ArrayList tp = new System.Collections.ArrayList(); System.Xml.XmlDocument objDoc = new System.Xml.XmlDocument(); objDoc.XmlResolver = null; System.Xml.XmlNamespaceManager Manager = new System.Xml.XmlNamespaceManager(objDoc.NameTable); System.Xml.XmlNodeList objNodes; string RetrievedRecords = "0"; System.Collections.ArrayList RecordSet = new System.Collections.ArrayList(); rd = new System.Xml.XmlTextReader(xml, System.Xml.XmlNodeType.Document, null); string RecordPosition = "1"; while (rd.Read()) { if (rd.NodeType == System.Xml.XmlNodeType.Element) { if (rd.Name.IndexOf("numberOfRecords") > -1) { RetrievedRecords = rd.ReadString(); } if (rd.Name.IndexOf("recordData") > -1) { RecordSet.Add(rd.ReadInnerXml()); //this needs to go somewhere } if (rd.Name.IndexOf("recordPosition") > -1) { RecordPosition = rd.ReadString(); } } } rd.Close(); for (int x = 0; x < RecordSet.Count; x++) { struct_Records st_recs = new struct_Records(); st_recs.xml = (string)RecordSet[x]; Manager.AddNamespace("marc", "http://www.loc.gov/MARC21/slim"); //try //{ objDoc.LoadXml((string)RecordSet[x]); objNodes = objDoc.SelectNodes("marc:record/marc:datafield[@tag='150']", Manager); if (objNodes == null) { objNodes = objDoc.SelectNodes("record/datafield[@tag='150']", Manager); } foreach (System.Xml.XmlNode objNode in objNodes) { st_recs.xml = objNode.InnerXml; System.Xml.XmlNodeList codes = objNode.SelectNodes("marc:subfield", Manager); if (codes == null) { codes = objNode.SelectNodes("subfield", Manager); } foreach (System.Xml.XmlNode objN in codes) { st_recs.display += objN.InnerText + " -- "; st_recs.main += "$" + objN.Attributes["code"].InnerText + objN.InnerText; } if (st_recs.display != null) { st_recs.display = st_recs.display.TrimEnd(" -".ToCharArray()); } else { st_recs.display = ""; } } if (objNodes.Count <= 0) { st_recs.main = "Undefined"; st_recs.xml = "<undefined>undefined</undefined>"; } //} //catch //{ // return null; //} tp.Add(st_recs); } RecordCount = System.Convert.ToInt32(RetrievedRecords); return tp; }