/// <summary> /// Creates XML file from Numenera items extracted from PDF /// </summary> /// <param name="info"></param> /// <param name="sourcebookName"></param> /// <param name="objectsName"></param> /// <param name="objectName"></param> private static void NumeneraCreateXML(PDFTextFileInfo info, string sourcebookName, string objectsName, string objectName) { var linesFromFile = File.ReadAllLines(info.ItemsFileName); var itemsLines = new List <string>(linesFromFile); itemsLines = PDFTextParser.FixBrokenWords(itemsLines); itemsLines = PDFTextParser.SplitLinesByKeywords(itemsLines, info.KeywordsList); var objects = PDFTextParser.SplitItemsToObjects(info, itemsLines.ToArray()); var smthToWrite = new List <string>(); objects.ForEach(x => x.ForEach(s => smthToWrite.Add(s))); File.WriteAllLines(info.ItemsFileName + "_Cleared.txt", smthToWrite); var parsedDic = PDFTextParser.CreateDictionariesFromObjects(objects, info.KeywordsList); // and make XML from it var xmlInfo = new PDFTextXmlInfo() { XmlFileName = Path.GetDirectoryName(info.ItemsFileName) + @"\OUTPUT_" + objectsName + "_" + sourcebookName + ".xml", ObjectsName = objectsName, ObjectName = objectName, Source = sourcebookName }; PDFTextXmlCreator.CreateXMLWithRollTable(xmlInfo, parsedDic, info.TableKeyword); }
public static void CreateXMLTableWithRollCell(PDFTextXmlInfo info, XElement tableString) { var rows = tableString.Value.Split('#'); tableString.RemoveAll(); foreach (var row in rows) { if (string.IsNullOrEmpty(row)) { continue; } if (!char.IsDigit(row[0])) { tableString.Descendants().Last().Value += " " + row; continue; } var curRow = new XElement("Row", ""); var spaceIndex = row.IndexOf(' '); var rollCell = row.Substring(0, spaceIndex); var resultCell = row.Substring(spaceIndex + 1, row.Length - spaceIndex - 1); curRow.Add(new XElement("Roll", rollCell)); curRow.Add(new XElement("Result", resultCell)); tableString.Add(curRow); } }
public static void CreateXML(PDFTextXmlInfo info, List <Dictionary <string, string> > objList, string tableKeyword = null) { XDocument xdoc = new XDocument(); // root element var objects = new XElement(info.ObjectsName); objects.Add(new XAttribute("source", info.Source)); foreach (var obj in objList) { // current element var curObject = new XElement(info.ObjectName); objects.Add(curObject); // loop for lines in one object foreach (var element in obj) { // clear string for xmlKey // by the best practices is better to avoid -, _, . string xmlKey = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(element.Key.ToLower()); xmlKey = new string(xmlKey.Where(c => char.IsLetterOrDigit(c)).ToArray()); var feature = new XElement(xmlKey, element.Value); curObject.Add(feature); if (tableKeyword != null && element.Key == tableKeyword) { CreateXMLTable(info, feature); } } } // saving final document xdoc.Add(objects); xdoc.Save(info.XmlFileName); }
public static void CreateXMLWithRollTable(PDFTextXmlInfo info, List <Dictionary <string, string> > objList, string tableKeyword = null) { XDocument xdoc = new XDocument(); // root element var objects = new XElement(info.ObjectsName); if (!string.IsNullOrEmpty(info.Source)) { objects.Add(new XAttribute("source", info.Source)); } var count = 0; foreach (var obj in objList) { // current element var curObject = new XElement(info.ObjectName); objects.Add(curObject); // loop for lines in one object foreach (var element in obj) { // clear string for xmlKey // by the best practices is better to avoid -, _, . string xmlKey = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(element.Key.ToLower()); xmlKey = new string(xmlKey.Where(c => char.IsLetterOrDigit(c)).ToArray()); if (tableKeyword != null && element.Key == tableKeyword) { var feature = new XElement("Roll" + xmlKey, element.Value); curObject.Add(feature); CreateXMLTableWithRollCell(info, feature); } else { var feature = new XElement(xmlKey, element.Value); curObject.Add(feature); } } count++; } objects.Add(new XAttribute("quantity", count)); // saving final document xdoc.Add(objects); try { xdoc.Save(info.XmlFileName); } catch (Exception ex) { ex.Data["UserMessage"] += "An error occured while trying to save XML file;"; throw; } }
public static void CreateXMLTable(PDFTextXmlInfo info, XElement tableString) { var rows = tableString.Value.Split('#'); tableString.RemoveAll(); foreach (var row in rows) { if (!string.IsNullOrEmpty(row)) { tableString.Add(new XElement("Row", row)); } } }
/// <summary> /// Create XML from file with oddities /// First digits are passed by (roll numbers) /// </summary> /// <param name="source"></param> /// <param name="itemsFileName"></param> public static void OdditiesParseFileToXML(string source, string itemsFileName) { var strings = PDFTextParser.ParseFileWithRollTableToStrings(itemsFileName); var xmlInfo = new PDFTextXmlInfo() { XmlFileName = Path.GetDirectoryName(itemsFileName) + @"\OUTPUT_Oddities_" + source + ".xml", ObjectsName = "Oddities", ObjectName = "Oddity", Source = "Discovery" }; PDFTextXmlCreator.CreateXMLForStrings(xmlInfo, strings); }
/// <summary> /// Parse list of string to XML (for oddities) /// </summary> /// <param name="info"></param> /// <param name="objList"></param> public static void CreateXMLForStrings(PDFTextXmlInfo info, List <string> objList) { XDocument xdoc = new XDocument(); var objects = new XElement(info.ObjectsName); if (!string.IsNullOrEmpty(info.Source)) { objects.Add(new XAttribute("source", info.Source)); } var count = 0; foreach (var obj in objList) { if (!string.IsNullOrEmpty(obj)) { objects.Add(new XElement(info.ObjectName, obj)); count++; } } objects.Add(new XAttribute("quantity", count)); xdoc.Add(objects); xdoc.Save(info.XmlFileName); }