static void Main(string[] args) { string filePathToDdp1 = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\Ddp1.xml"; string filePathToDdp4 = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\Ddp4.xml"; string filePathToThaiDdp1Questions = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\Ddp4Questions-th.xml"; string filePathToEnglishDdp4Questions = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\Ddp4Questions-en.xml"; string filePathToMap = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\Semantic Domains v1 to v4 map.txt"; string newDdpFile = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\newDdp.xml"; string newQuestionsFile = @"D:\SoftwareDevelopment\Ddp124Map\DDP4\newQuestion.xml"; SemanticDomainCollection semanticDomainsDdp1 = SemanticDomainReader.ReadFromFile(filePathToDdp1); SemanticDomainCollection semanticDomainsDdp4 = SemanticDomainReader.ReadFromFile(filePathToDdp4); Dictionary <string, string> map = Ddp4to1MapReader.ReadFromFile(filePathToMap); foreach (SemanticDomainInfo ddp1SemanticDomain in semanticDomainsDdp1.AllSemanticDomains) { string correspondingNumberInDdp4 = ddp1SemanticDomain.Number; if (map.ContainsKey(ddp1SemanticDomain.Number)) { correspondingNumberInDdp4 = map[ddp1SemanticDomain.Number]; } SemanticDomainInfo semanticDomainToMergeInto = semanticDomainsDdp4.GetSemanticDomainWithNumber(correspondingNumberInDdp4); semanticDomainToMergeInto.MergeInTranslations(ddp1SemanticDomain); } SemanticDomainWriter.WriteToFile(newDdpFile, semanticDomainsDdp4); SemanticDomainQuestionsCollection thaiDdp1Questions = SemanticDomainQuestionsReader.ReadFromFile(filePathToThaiDdp1Questions); SemanticDomainQuestionsCollection thaiDdp4Questions = new SemanticDomainQuestionsCollection(thaiDdp1Questions.Version, thaiDdp1Questions.WritingSystemId); foreach (SemanticDomainQuestions domainQuestions in thaiDdp1Questions.DomainKeyToQuestionsMap.Values) { string semanticDomainKey = GetMappedSemanticDomainKey(map, semanticDomainsDdp4, domainQuestions); bool questionsForDomainAlreadyExist = thaiDdp4Questions.DomainKeyToQuestionsMap.ContainsKey(semanticDomainKey); if (!questionsForDomainAlreadyExist) { SemanticDomainQuestions newQuestions = new SemanticDomainQuestions(Guid.NewGuid(), semanticDomainKey); thaiDdp4Questions.DomainKeyToQuestionsMap.Add(semanticDomainKey, newQuestions); } thaiDdp4Questions.DomainKeyToQuestionsMap[semanticDomainKey].Questions.AddRange(domainQuestions.Questions); } SemanticDomainQuestionsWriter.WriteToFile(newQuestionsFile, thaiDdp4Questions); Console.ReadLine(); }
static public SemanticDomainCollection ReadFromFile(string filePath) { SemanticDomainCollection semanticDomains = new SemanticDomainCollection(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader fileReader = XmlReader.Create(filePath, settings); while (fileReader.Read()) { if (fileReader.Name == "option") { semanticDomains.AddSemanticDomain(PopulateSemanticDomainFromXml(fileReader)); } } fileReader.Close(); return(semanticDomains); }
static public void WriteToFile(string path, SemanticDomainCollection semanticDomains) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; settings.ConformanceLevel = ConformanceLevel.Document; XmlWriter fileWriter = XmlWriter.Create(path, settings); fileWriter.WriteStartDocument(); fileWriter.WriteStartElement("optionsList"); fileWriter.WriteAttributeString("id", "DDP4"); fileWriter.WriteAttributeString("guid", Guid.NewGuid().ToString()); fileWriter.WriteStartElement("options"); foreach (SemanticDomainInfo semanticDomain in semanticDomains.AllSemanticDomains) { WriteSemanticDomainToFile(fileWriter, semanticDomain); } fileWriter.WriteEndElement(); fileWriter.WriteEndElement(); fileWriter.Close(); }
private static string GetMappedSemanticDomainKey(Dictionary <string, string> map, SemanticDomainCollection semanticDomainsDdp4, SemanticDomainQuestions domainQuestions) { string semanticDomainNumber = domainQuestions.Number; if (map.ContainsKey(domainQuestions.Number)) { semanticDomainNumber = map[domainQuestions.Number]; } return(semanticDomainsDdp4.GetSemanticDomainWithNumber(semanticDomainNumber).Key); }