Example #1
0
        private void HarvestMarcData(String marcFile, int batchID, String institutionCode)
        {
            BHLProvider provider = new BHLProvider();

            // Open the file and parse the data within it
            XmlDocument xml = new XmlDocument();
            xml.Load(marcFile);
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
            nsmgr.AddNamespace("ns", "http://www.loc.gov/MARC21/slim");

            // update the root Marc information
            String leader = String.Empty;
            XmlNode marcNode = xml.SelectSingleNode("ns:record/ns:leader", nsmgr);
            if (marcNode != null) leader = marcNode.InnerText;
            Marc marc = provider.MarcInsertAuto(batchID,
                marcFile.Replace(ConfigurationManager.AppSettings["MarcUploadDrive"], ConfigurationManager.AppSettings["MarcUploadServer"]),
                institutionCode, leader, null);

            // Insert the new Marc control information
            XmlNodeList controlFields = xml.SelectNodes("ns:record/ns:controlfield", nsmgr);
            foreach (XmlNode controlField in controlFields)
            {
                String tag = (controlField.Attributes["tag"] == null) ? String.Empty : controlField.Attributes["tag"].Value;
                String value = controlField.InnerText;
                provider.MarcControlInsertAuto(marc.MarcID, tag, value);
            }

            // Insert the new Marc data field and subfield information
            XmlNodeList dataFields = xml.SelectNodes("ns:record/ns:datafield", nsmgr);
            foreach (XmlNode dataField in dataFields)
            {
                String tag = (dataField.Attributes["tag"] == null) ? String.Empty : dataField.Attributes["tag"].Value;
                String indicator1 = (dataField.Attributes["ind1"] == null) ? String.Empty : dataField.Attributes["ind1"].Value;
                String indicator2 = (dataField.Attributes["ind2"] == null) ? String.Empty : dataField.Attributes["ind2"].Value;
                MarcDataField marcDataField = provider.MarcDataFieldInsertAuto(marc.MarcID, tag, indicator1, indicator2);

                XmlNodeList subFields = dataField.SelectNodes("ns:subfield", nsmgr);
                foreach (XmlNode subField in subFields)
                {
                    String code = (subField.Attributes["code"] == null) ? String.Empty : subField.Attributes["code"].Value;
                    String value = subField.InnerText;
                    provider.MarcSubFieldInsertAuto(marcDataField.MarcDataFieldID, code, value);
                }
            }
        }