/// <summary> /// /// </summary> /// <param name="requestString"></param> /// <returns></returns> private PfamAlignInfo[] GetPfamFamilyAlignment(string requestString) { string jobInfoXml = "pfamjobInfo.xml"; WebClient webClient = new WebClient(); // Thread.Sleep (3000); webClient.DownloadFile(requestString, jobInfoXml); PfamJobInfo jobInfo = ParseJobInfoXml(jobInfoXml); string resultXml = "pfamAlignResult.xml"; long fileSize = 0; FileInfo resultFileInfo = null; int numOfTrials = 0; while (fileSize == 0 && numOfTrials <= 10) { numOfTrials++; Thread.Sleep(jobInfo.estimatedTime * 10000); webClient.DownloadFile(jobInfo.resultUrl, resultXml); resultFileInfo = new FileInfo(resultXml); fileSize = resultFileInfo.Length; } resultFileInfo = new FileInfo(resultXml); fileSize = resultFileInfo.Length; if (fileSize == 0) { throw new Exception("The alginment file is not on PFAM"); } // string resultXml = "pfamAlignResult0.xml"; PfamAlignInfo[] pfamAlignInfos = ParsePfamResultXmlFile(resultXml); return(pfamAlignInfos); }
/// <summary> /// /// </summary> /// <param name="jobInfoXml"></param> /// <returns></returns> public PfamJobInfo ParseJobInfoXml(string jobInfoXml) { PfamJobInfo pfamJobInfo = new PfamJobInfo(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(jobInfoXml); // Create an XmlNamespaceManager for resolving namespaces. XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); nsManager.AddNamespace("pfam", "http://pfam.sanger.ac.uk/"); XmlNodeList jobNodeList = xmlDoc.DocumentElement.ChildNodes; string resultUrl = ""; if (jobNodeList != null) { XmlNode jobNode = jobNodeList[0]; XmlNodeList jobInfoNodes = jobNode.ChildNodes; foreach (XmlNode infoNode in jobInfoNodes) { if (infoNode.Name.ToLower() == "estimated_time") { pfamJobInfo.estimatedTime = Convert.ToInt32(infoNode.InnerText); } if (infoNode.Name.ToLower() == "result_url") { resultUrl = infoNode.InnerText.TrimEnd(); resultUrl = resultUrl.Trim("\n".ToCharArray()); pfamJobInfo.resultUrl = resultUrl; } } } return(pfamJobInfo); }