Пример #1
0
        //--------------------------------------------------------------------------------
        // Creates table.xml file containing information about all the table files.
        private void CreateTableXML(SiardTableXml table)
        {
            //string tableName = Path.GetFileName(Directory.GetParent(sourceFolder).ToString());

            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
            {
                Indent      = true,
                IndentChars = "    "
            };

            xmlWriter = XmlWriter.Create(Path.Combine(siardFolderOutput, finder.LobFolder, table.TableSchema, table.TableFileName, table.TableFileName + ".xml"), xmlWriterSettings);

            xmlWriter.WriteStartDocument();

            string timeStampDate = DateTime.Now.ToShortDateString();
            string timeStampTime = DateTime.Now.ToLongTimeString();

            xmlWriter.WriteComment("Create time: " + timeStampDate + " " + timeStampTime);
            //xmlWriter.WriteComment("Table " + tableSchema + "/" + tableName + " corresponds to actual table " + actualTable);
            xmlWriter.WriteComment(comments[1].Value);

            xmlWriter.WriteStartElement("table", "http://www.bar.admin.ch/xmlns/siard/2/table.xsd");
            xmlWriter.WriteAttributeString("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "http://www.bar.admin.ch/xmlns/siard/2/table.xsd " + table.TableFileName + ".xsd");
            xmlWriter.WriteAttributeString("version", "2.1");
        }
Пример #2
0
        //--------------------------------------------------------------------------------
        // Reads the chosen table.xml and put all info in a list of lobs.
        private void ReadTableXml(SiardTableXml lobTable)
        {
            string contentPath = Directory.GetParent(Path.GetDirectoryName(lobTable.TableFilePath)).ToString();
            string lobRootPath = Path.Combine(contentPath, lobTable.LobPath);

            lobs.Clear();

            XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();

            xmlReaderSettings.IgnoreComments = false;
            XmlReader xmlReader = XmlReader.Create(inputFileName, xmlReaderSettings);

            Console.WriteLine("xml file: " + inputFileName);
            Console.WriteLine("lob root path: " + lobRootPath);

            XmlDocument tableXml = new XmlDocument();

            tableXml.Load(xmlReader);
            //tableXml.LoadXml("<!--comment--><root><!--comment--></root>");
            XmlNode table = tableXml.DocumentElement;

            var nsmgr     = new XmlNamespaceManager(tableXml.NameTable);
            var nameSpace = tableXml.DocumentElement.NamespaceURI;

            nsmgr.AddNamespace("ns", nameSpace);

            int rowCount = 0;
            int rowTotal = table.ChildNodes.Count;
            int progress = 0;

            foreach (XmlNode row in table.ChildNodes)
            {
                if (row.NodeType == XmlNodeType.Comment)
                {
                    // comments.Add(row);
                }
                else
                {
                    string fileId = getNodeText(row, "descendant::ns:c1", nsmgr);

                    long     fileCount = getNodeInt(row, "descendant::ns:c2", nsmgr);
                    long     lobSize   = getNodeInt(row, "descendant::ns:c3", nsmgr);
                    string[] lobString = getAttributeText(row, "descendant::ns:c4", nsmgr);

                    string lobPath = Path.Combine(siardFolderOutput, finder.lobFolder, lobTable.LobPath);
                    lobs.Add(new Lob(fileId, fileCount, lobSize, lobString[0], lobString[1], Path.Combine(lobRootPath, lobString[0]), lobPath));
                }
                rowCount++;
                // Globals.countTotalRows++;
                progress = rowCount * 100 / rowTotal;
                backgroundWorker1.ReportProgress(progress);
            }

            lobs = lobs.OrderBy(o => o.FileId).ThenBy(s => s.FileCount).ToList();

            comments = tableXml.SelectNodes("//comment()", nsmgr);

            backgroundWorker1.ReportProgress(progress, ", table loaded");
        }