private Kniha NacistKnihu(XmlNode xml) { Kniha kniha = new Kniha(); kniha.Id = xml.SelectSingleNode("@osisID").InnerText; // Budeme iterativně zpracovávat seznam XML potomků a přidávát // ekvivalenty. List <CastTextu> rodice = new List <CastTextu> { kniha }; // Tento seznam obashuje seznamy XML prvků, které patří do daného rodiče. List <List <XmlNode> > xmlProRodice = new List <List <XmlNode> > { xml.ChildNodes.OfType <XmlNode>().ToList() }; while (rodice.Count > 0) { CastTextu rodic = rodice[0]; rodice.RemoveAt(0); List <XmlNode> xmlProTohotoRodice = xmlProRodice[0]; xmlProRodice.RemoveAt(0); foreach (XmlNode xmlPotomek in xmlProTohotoRodice) { if (xmlPotomek is XmlElement) { XmlElement xmlPotomekElem = xmlPotomek as XmlElement; if ( xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") && xmlPotomek.Attributes["type"].InnerText == "majorSection") { // Máme major section. HlavniCastKnihy hlavniCast = new HlavniCastKnihy { Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText }; rodic.PridatPotomka(hlavniCast); rodice.Add(hlavniCast); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if ( xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") && xmlPotomek.Attributes["type"].InnerText == "section") { CastKnihy castKnihy = new CastKnihy { Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText.Trim('<', '>', '"') }; rodic.PridatPotomka(castKnihy); rodice.Add(castKnihy); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if ( xmlPotomek.Name == "div" && xmlPotomekElem.HasAttribute("type") && xmlPotomek.Attributes["type"].InnerText == "preface") { // Předmluva. CastKnihy castKnihy = new CastKnihy { Nadpis = xmlPotomek.SelectSingleNode("os:title", NsManager).InnerText }; rodic.PridatPotomka(castKnihy); rodice.Add(castKnihy); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "lg") { // Máme báseň. Poezie poezie = new Poezie(); rodic.PridatPotomka(poezie); rodice.Add(poezie); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "p") { // Odstavec složený z veršů, řádků básně či dalšího obsahu. Odstavec odstavec = new Odstavec(); rodic.PridatPotomka(odstavec); rodice.Add(odstavec); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "chapter") { if (xmlPotomekElem.HasAttribute("osisID") && xmlPotomekElem.HasAttribute("sID")) { UvodKapitoly uvodKapitoly = new UvodKapitoly { Id = xmlPotomek.SelectSingleNode("@osisID", NsManager).InnerText }; rodic.PridatPotomka(uvodKapitoly); rodice.Add(uvodKapitoly); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else { // Konec kapitoly, zatím se neřeší. } } else if (xmlPotomekElem.Name == "verse") { if (xmlPotomekElem.HasAttribute("osisID")) { Vers vers = new Vers { Id = xmlPotomek.SelectSingleNode("@osisID", NsManager).InnerText }; rodic.PridatPotomka(vers); rodice.Add(vers); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else { // Konec verše, zatím se neřeší. } } else if (xmlPotomek.Name == "l") { RadekPoezie radekPoezie = new RadekPoezie(); rodic.PridatPotomka(radekPoezie); rodice.Add(radekPoezie); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "note") { // Poznámka (pod čarou). Poznamka poznamka = new Poznamka(); rodic.PridatPotomka(poznamka); rodice.Add(poznamka); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "i") { // Poznámka (pod čarou). FormatovaniTextu formatovaniTextu = new FormatovaniTextu { Kurziva = true }; rodic.PridatPotomka(formatovaniTextu); rodice.Add(formatovaniTextu); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else if (xmlPotomek.Name == "head") { // Poznámka (pod čarou). CastPoezie castPoezie = new CastPoezie(); rodic.PridatPotomka(castPoezie); rodice.Add(castPoezie); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else { } } else if (xmlPotomek is XmlText) { // Máme čistě textový záznam. CastTextuSTextem textovaCast = new CastTextuSTextem { /* * TextovaData = HttpUtility.HtmlEncode(Regex.Replace( * xmlPotomek.Value, * "[\\n\\r ]+$", * " ")) */ TextovaData = Regex.Replace( xmlPotomek.Value, "[\\n\\r ]+$", " ") }; rodic.PridatPotomka(textovaCast); rodice.Add(textovaCast); xmlProRodice.Add(xmlPotomek.ChildNodes.OfType <XmlNode>().ToList()); } else { } } } return(kniha); }
public Start() { InitializeComponent(); //获取MC类 MC mc = MC.GetMC(); //将Name绑定到mc的Name属性 GameName.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = mc, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Mode = BindingMode.TwoWay }); //设置Vers的源由MCseting提供 Vers.ItemsSource = MCSetting.AllVer; //创建启动路由命令 RoutedCommand StartCommand = new RoutedCommand(); //设置命令快捷键 StartCommand.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Alt)); //创造命令绑定 CommandBinding StartCommandBinding = new CommandBinding(StartCommand); //将Ver绑定 Vers.SetBinding(ComboBox.SelectedItemProperty, new Binding("Ver") { Source = mc, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Mode = BindingMode.TwoWay }); //设置什么时候命令可以执行 StartCommandBinding.CanExecute += (s, e) => { if (mc.IsReady()) { e.CanExecute = true; } else { e.CanExecute = false; } e.Handled = true; }; //设置执行的内容 StartCommandBinding.Executed += (s, e) => { var setting = MCsettingJSONModel.GetConfig; setting.Name = mc.Name; var mcsetting = MCSetting.GetSetting(); setting.JavaPath = mcsetting.JavaPath; setting.MaxRam = mcsetting.MaxRam; setting.MCVer = mc.Ver.Name; MCsettingJSONModel.GetConfig = setting; try { Load.Visibility = Visibility.Visible; mc.Start(); Environment.Exit(0); } catch (ApplicationException ex) { var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo); if (r == MessageBoxResult.Yes) { Environment.FailFast("因异常而终止"); } } catch (System.IO.DirectoryNotFoundException ex) { var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo); if (r == MessageBoxResult.Yes) { Environment.FailFast("因异常而终止"); } } catch (System.IO.FileNotFoundException ex) { var r = ModernDialog.ShowMessage($"在启动时出现了异常:{Environment.NewLine}信息:{ex.Message}{Environment.NewLine}源:{ex.Source}{Environment.NewLine}在方法{ex.TargetSite}中{Environment.NewLine}堆栈跟踪:{ex.StackTrace}", "异常", MessageBoxButton.YesNo); if (r == MessageBoxResult.Yes) { Environment.FailFast("因异常而终止"); } } finally { Load.Visibility = Visibility.Hidden; } e.Handled = true; }; //添加命令到控件 Starter.Command = StartCommand; //添加命令绑定 Starter.CommandBindings.Add(StartCommandBinding); }