//-------------------------------------------------------------------------------- // 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"); }
//-------------------------------------------------------------------------------- // 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"); }