static string ToString(NameValueLine line) { StringBuilder text = new StringBuilder(); text.Append("Name=" + line.Name + "\r\n"); text.Append("Type=" + line.Type + "\r\n"); text.Append("Value=" + line.Value + "\r\n"); text.Append("Xml=" + line.Xml + "\r\n"); return(text.ToString()); }
static void CompareResults(List <NameValueLine> results, List <NameValueLine> expect_results) { Debug.WriteLine("\r\n结果:\r\n" + ToString(results) + "\r\n期望的结果:\r\n" + ToString(expect_results)); if (results.Count != expect_results.Count) { throw new Exception("和期望的 results.Count 不符合。\r\n实际=" + results.Count + " 期望=" + expect_results.Count); } for (int i = 0; i < results.Count; i++) { NameValueLine line = results[i]; NameValueLine expect_line = expect_results[i]; if (ToString(line) != ToString(expect_line)) { throw new Exception("两个集合不一致(集合元素 " + (i + 1) + "位置)。\r\n结果:\r\n" + ToString(line) + "\r\n期望的结果:\r\n" + ToString(expect_line)); } } }
public static void VerifyTableXml(string strWorksheet, string strStyle, string strTableXml) { MarcRecord record = MarcRecord.FromWorksheet(strWorksheet); List <NameValueLine> expect_results = NameValueLine.FromTableXml(strTableXml); int nRet = MarcTable.ScriptUnimarc( "中文图书/1", record.Text, strStyle, out List <NameValueLine> results, out string strError); if (nRet == -1) { throw new Exception(strError); } CompareResults(results, expect_results); }
// 列出一个检索目标的所有可用检索途径 public async Task <List <NameValueLine> > ListUses(SruTarget target) { List <NameValueLine> results = new List <NameValueLine>(); XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("srw", "http://www.loc.gov/zing/srw/"); nsmgr.AddNamespace("explain20", "http://explain.z3950.org/dtd/2.0/"); nsmgr.AddNamespace("explain21", "http://explain.z3950.org/dtd/2.1/"); /* * * <explain xmlns="http://explain.z3950.org/dtd/2.0/" xmlns:ns="http://explain.z3950.org/dtd/2.1/"> * <serverInfo> * <ns:host>bibsys-network.alma.exlibrisgroup.com</ns:host> * <ns:port>80</ns:port> * <ns:database>47BIBSYS_NETWORK</ns:database> * </serverInfo> * <indexInfo> * <set name="alma" identifier="marcxml"/> * <index> * <ns:title>Accompanying Material</ns:title> * <map> * <name set="alma">accompanying_material</name> * </map> * <configInfo> * <supports type="relation">all</supports> * <supports type="relation">=</supports> * <supports type="emptyTerm"/> * </configInfo> * </index> * <index> * <ns:title>Additional physical form available note</ns:title> * <map> * <name set="alma">additional_physical_form_available_note</name> * </map> * <configInfo> * <supports type="relation">all</supports> * <supports type="relation">=</supports> * <supports type="relation">==</supports> * </configInfo> * </index> * */ XmlDocument dom = await GetExplainDomAsync(target.Name, "explain", target.GetExplainUrl()).ConfigureAwait(false); XmlNodeList nodes = dom.DocumentElement.SelectNodes("//explain20:indexInfo/explain20:index", nsmgr); foreach (XmlElement index in nodes) { string title = index.SelectSingleNode("explain21:title", nsmgr)?.InnerText; XmlElement map = index.SelectSingleNode("explain20:map/explain20:name", nsmgr) as XmlElement; string set = map.GetAttribute("set"); NameValueLine line = new NameValueLine(title, $"{set}.{map.InnerText}"); results.Add(line); } return(results); }