// 装入检索命中记录到浏览列表中 int LoadResults(XmlDocument response_dom, // bool bDisplayInfo, Delegate_appendBrowseLine appendBrowseLineProc, object param, bool bAutoSetFocus, out string strError) { strError = ""; int nRet = 0; // string strElementSet = ""; // 建立 ASIN --> ListViewItem 对照表 Hashtable table = new Hashtable(); #if NO if (this.m_reloadInfo != null) { foreach (ListViewItem item in this.m_reloadInfo.CurrentItems) { table[item.Text] = item; } strElementSet = this.m_reloadInfo.ElementSet; } else { if (bUseFullElementSet == true) strElementSet = "F"; else strElementSet = "B"; } #endif XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("amazon", NAMESPACE); XmlNodeList items = response_dom.DocumentElement.SelectNodes("amazon:Items/amazon:Item", nsmgr); foreach (XmlNode item in items) { var element = item as XmlElement; List<string> cols = null; string strASIN = ""; string strCoverImageUrl = ""; nRet = ParseItemXml(element, nsmgr, out strASIN, out strCoverImageUrl, out cols, out strError); if (nRet == -1) return -1; nRet = appendBrowseLineProc("", element.OuterXml, param, bAutoSetFocus, out strError); if (nRet == -1) return -1; if (nRet == 1) break; #if NO if (info.EelementSet == "B") listitem.ImageIndex = BROWSE_TYPE_BRIEF; else listitem.ImageIndex = BROWSE_TYPE_FULL; #endif } #if NO if (this.m_reloadInfo == null) { if (bDisplayInfo == true) { this.amazonSimpleQueryControl_simple.Comment = "命中记录:\t" + m_nTotalResults.ToString() + "\r\n已装入浏览记录:\t" + this.listView_browse.Items.Count.ToString(); } } else { if (table.Count != 0) { strError = "下列事项没有被重新装载 '" + Join(table.Keys) + "'"; return -1; } } #endif return 0; }
// return: // -1 出错 // >=0 命中的记录数 public int LoadBrowseLines(Delegate_appendBrowseLine appendBrowseLineProc, object param, bool bAutoSetFocus, out string strError) { strError = ""; XmlDocument doc = new XmlDocument(); doc.Load(this.TempFilename); XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("amazon", NAMESPACE); XmlNodeList errors = doc.DocumentElement.SelectNodes("amazon:Items/amazon:Request/amazon:Errors/amazon:Error", nsmgr); if (errors.Count > 0) { string strCode = DomUtil.GetElementText(errors[0], "amazon:Code", nsmgr); string strMessage = DomUtil.GetElementText(errors[0], "amazon:Message", nsmgr); if (strCode == "AWS.ECommerceService.NoExactMatches") { strError = strCode; goto ERROR1; } strError = strMessage; goto ERROR1; } int nHitCount = 0; if (this.m_reloadInfo == null) { // Items/TotalResults string strTotalResults = DomUtil.GetElementText(doc.DocumentElement, "amazon:Items/amazon:TotalResults", nsmgr); Int64.TryParse(strTotalResults, out this.m_nTotalResults); // Items/TotalPages string strTotalPages = DomUtil.GetElementText(doc.DocumentElement, "amazon:Items/amazon:TotalPages", nsmgr); Int64.TryParse(strTotalPages, out this.m_nTotalPages); nHitCount = (int)Math.Min(m_nTotalResults, 10); #if NO // TODO: 显示单行命中的消息 if (m_nTotalResults > 0) { int nHitCount = (int)Math.Min(m_nTotalResults, 10); this.m_multiSearchInfo.HitWords.Add(this.m_multiSearchInfo.CurrentWord + "\t" + nHitCount.ToString()); this.m_multiSearchInfo.HitCount += nHitCount; } else this.m_multiSearchInfo.NotHitWords.Add(this.m_multiSearchInfo.CurrentWord); #endif // this.amazonSimpleQueryControl_simple.Comment = "命中记录:\t" + m_nTotalResults.ToString(); } int nRet = LoadResults(doc, // _userFullElementSet, appendBrowseLineProc, param, bAutoSetFocus, out strError); if (nRet == -1) goto ERROR1; if (this.m_reloadInfo == null) { this.m_nCurrentPageNo++; // 第一次 从 -1 ++ 正好等于 0 } return nHitCount; ERROR1: if (this.m_reloadInfo != null) this.m_reloadInfo.Cancel = true; this.DeleteTempFile(); if (strError == "AWS.ECommerceService.NoExactMatches") { // TODO: 显示单行没有命中的消息 ////this.m_multiSearchInfo.NotHitWords.Add(this.m_multiSearchInfo.CurrentWord); return 0; } // TODO: 显示单行检索出错的消息 // this.amazonSimpleQueryControl_simple.Comment = "检索发生错误:\r\n" + strError; this.m_bError = true; this.m_strError = strError; return -1; }