public void VypisCharakteristiku() { if (base.VstupniSoubor == null || base.VystupniSoubor == null) { throw new ArgumentNullException("Nebyly zadány vhodné názvy vstupního nebo výstupního souboru."); } using (XmlReader r = Objekty.VytvorXmlReader(base.VstupniSoubor)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(base.VystupniSoubor)) { xw.WriteStartDocument(true); xw.WriteStartElement("entries"); while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "entryhead": XmlDocument xd = new XmlDocument(); xd.LoadXml(r.ReadOuterXml()); if (xd.DocumentElement.InnerXml.Contains("<pos>")) { xw.WriteStartElement("entryhead"); foreach (XmlNode xn in xd.DocumentElement.ChildNodes) { if (xn.Name == "pos") { xn.WriteTo(xw); xw.WriteEndElement(); break; } xn.WriteTo(xw); } } break; default: break; } } } xw.WriteEndElement(); } } }
public static void ExtrahovatSeznamXml(string strVstupniSoubor, string strVystupniSoubor, string strZdroj) { using (XmlReader r = Objekty.VytvorXmlReader(strVstupniSoubor)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(strVystupniSoubor)) { string sHeslo = null; xw.WriteStartElement("xrefs"); xw.WriteAttributeString("source", strZdroj); while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "entry": sHeslo = r.GetAttribute("defaulthw"); break; case "xref": XmlDocument xd = new XmlDocument(); XmlNode xn = xd.ReadNode(r); if (xn != null) { xd.AppendChild(xn); XmlAttribute xa = xd.CreateAttribute("defaulthw"); xa.Value = sHeslo; xd.DocumentElement.Attributes.Append(xa); } if (xd.DocumentElement != null) { xd.WriteContentTo(xw); } break; default: break; } } } xw.WriteEndElement(); //xrefs } } }
public void VypisHeslaTypeUse() { if (base.VstupniSoubor == null || base.VystupniSoubor == null) { throw new ArgumentNullException("Nebyly zadány vhodné názvy vstupního nebo výstupního souboru."); } using (XmlReader r = Objekty.VytvorXmlReader(base.VstupniSoubor)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(base.VystupniSoubor)) { xw.WriteStartDocument(true); xw.WriteStartElement("entries"); while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "entry": string sUse = r.GetAttribute("use"); string sType = r.GetAttribute("type"); if (sUse == "public" && sType == "excl") { DPXT.SerializeNode(r, xw); xw.WriteEndElement(); } break; default: break; } } } xw.WriteEndElement(); } } }
public override void KonsolidovatHeslovouStat(string inputFile, string outputFile) { int iEntry = 0; string sSource = null; using (XmlReader r = Objekty.VytvorXmlReader(inputFile)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(outputFile)) { xw.WriteStartDocument(true); while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "entry": XmlDocument xd = new XmlDocument(); XmlNode xn = xd.ReadNode(r); if (xn != null) { xd.AppendChild(xn); } if (xd.DocumentElement != null) { if (!xd.DocumentElement.IsEmpty) { if (ZkonsolidujEntry(ref xd, sSource, ++iEntry)) { xd.WriteContentTo(xw); } } } break; case "dictionary": sSource = r.GetAttribute("name"); goto default; default: Transformace.SerializeNode(r, xw); break; } } else if (r.NodeType == XmlNodeType.EndElement) { switch (r.Name) { case "entry": break; default: Transformace.SerializeNode(r, xw); break; } } else { Transformace.SerializeNode(r, xw); } } } } }
/// <summary> /// Upraví hranice heslové stati. Ohraničí jednotlivé části značkou <entry> a v rámci heslové stati seskupí významy podřazené značce <senseGrp>. /// </summary> public override void UpravitHraniceHesloveStati(string inputFile, string outputFile) { if (inputFile == null || outputFile == null) { throw new ArgumentNullException("Nebyly zadány vhodné názvy vstupního nebo výstupního souboru."); } using (XmlReader r = Objekty.VytvorXmlReader(inputFile)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(outputFile)) { xw.WriteStartDocument(true); bool blnPrvniEntryhead = true; bool blnVyskytlySeVyznamy = false; string strTypSenseGrp = null; Stack <string> gstTypSenseGrp = new Stack <string>(); int intPocetOtevrenychSenseGrp = 0; bool blnPrvniVyznam = false; int xmlReaderDepp = 0; int xmlWriterDeep = 0; while (r.Read()) { //Console.WriteLine("Reader: {0}, Writer: {1}", xmlReaderDepp, xmlWriterDeep); if (r.NodeType == XmlNodeType.Element) { xmlReaderDepp++; if (r.IsEmptyElement) { xmlReaderDepp--; } if (r.Name == "div1") { string name = r.Name; } switch (r.Name) { case "entryhead": if (blnPrvniVyznam) { WriteEndElement(xw, ref xmlWriterDeep); //senses xw.WriteWhitespace("\r\n"); } blnPrvniVyznam = false; blnVyskytlySeVyznamy = false; int iPocetSenseGrp = gstTypSenseGrp.Count; if (iPocetSenseGrp > 0) { for (int i = 1; i < iPocetSenseGrp; i++) { intPocetOtevrenychSenseGrp--; WriteEndElement(xw, ref xmlWriterDeep); //senseGrp xw.WriteWhitespace("\r\n"); } gstTypSenseGrp.Clear(); } while (intPocetOtevrenychSenseGrp > 0) { WriteEndElement(xw, ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); intPocetOtevrenychSenseGrp--; } if (!blnPrvniEntryhead) { WriteEndElement(xw, ref xmlWriterDeep); //entry xw.WriteWhitespace("\r\n"); } else { blnPrvniEntryhead = false; } WriteStartElement(xw, "entry", ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); goto default; case "senseGrp": strTypSenseGrp = r.GetAttribute("type"); intPocetOtevrenychSenseGrp++; if (gstTypSenseGrp.Count > 0) { if (strTypSenseGrp == gstTypSenseGrp.Peek()) { WriteEndElement(xw, ref xmlWriterDeep); //senseGrp xw.WriteWhitespace("\r\n"); intPocetOtevrenychSenseGrp--; } else { if (blnVyskytlySeVyznamy) { WriteEndElement(xw, ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); intPocetOtevrenychSenseGrp--; } else { gstTypSenseGrp.Push(strTypSenseGrp); } } } else { gstTypSenseGrp.Push(strTypSenseGrp); } blnVyskytlySeVyznamy = false; goto default; case "sense": if (!blnPrvniVyznam) { WriteStartElement(xw, "senses", ref xmlWriterDeep); //xw.WriteStartElement("senses"); xw.WriteWhitespace("\r\n"); blnPrvniVyznam = true; } blnVyskytlySeVyznamy = true; goto default; case "note": case "appendix": if (r.IsEmptyElement) { goto default; } while (gstTypSenseGrp.Count > 0) { //xw.WriteEndElement(); WriteEndElement(xw, ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); intPocetOtevrenychSenseGrp--; gstTypSenseGrp.Pop(); } if (blnPrvniVyznam) { //xw.WriteEndElement(); //senses WriteEndElement(xw, ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); blnPrvniVyznam = false; } goto default; default: if (!r.IsEmptyElement) { xmlWriterDeep++; } DPXT.SerializeNode(r, xw); break; } } else { if (r.NodeType == XmlNodeType.EndElement) { xmlReaderDepp--; switch (r.Name) { case "senseGrp": if (blnPrvniVyznam) { //xw.WriteEndElement(); //senses WriteEndElement(xw, ref xmlWriterDeep); xw.WriteWhitespace("\r\n"); blnPrvniVyznam = false; } break; case "div1": //xw.WriteEndElement(); //entry while (xmlWriterDeep > xmlReaderDepp + 1) { WriteEndElement(xw, ref xmlWriterDeep); } blnPrvniEntryhead = true; blnPrvniVyznam = false; goto default; default: xmlWriterDeep--; DPXT.SerializeNode(r, xw); break; } } //else if (r.NodeType == XmlNodeType.XmlDeclaration && r.Name == "xml") { // //nedělat nic, jde o začátek dokumentu; genruje cyhbu: nelze zapsat deklaraci, dokument již byl započat //} else { DPXT.SerializeNode(r, xw); } } } } } }
/// <summary> /// Upraví hranice heslové stati, seskupí všechny prvky heslové stati do elementu <entry>. Využívá při tom značku <entryend> /// </summary> /// <exception cref="ArgumentNullException">Vyvolá výjimku, pokud nejsou zadány vstupní nebo výstupní soubor.</exception> public override void UpravitHraniceHesloveStati(string inputFile, string outputFile) { //výchozí imnplementace se hodí pro ESSČ string sChyba = null; if (inputFile == null || outputFile == null) { throw new ArgumentNullException("Nebyly zadány vhodné názvy vstupního nebo výstupního souboru."); } using (XmlReader r = Objekty.VytvorXmlReader(inputFile)) { using (XmlWriter xw = Objekty.VytvorXmlWriter(outputFile)) { /* * string strTypSenseGrp = null; * Stack<string> gstTypSenseGrp = new Stack<string>(); * int intPocetOtevrenychSenseGrp = 0; * bool blnVyskytlySeVyznamy = false; */ bool blnJeSenseGrp = false; bool blnJeSense = false; xw.WriteStartDocument(true); bool blnPrvniEntryhead = true; try { while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "entryhead": if (blnPrvniEntryhead) { xw.WriteStartElement("entry"); xw.WriteWhitespace("\r\n"); blnPrvniEntryhead = false; } DPXT.SerializeNode(r, xw); blnJeSenseGrp = blnJeSense = false; break; case "entryend": xw.WriteEndElement(); //entry xw.WriteWhitespace("\r\n"); blnPrvniEntryhead = true; break; case "senseGrp": if (blnJeSense) { xw.WriteEndElement(); //senses } if (blnJeSenseGrp) { xw.WriteEndElement(); //senseGrp } blnJeSenseGrp = true; blnJeSense = false; goto default; case "sense": if (!blnJeSense) { xw.WriteStartElement("senses"); } blnJeSense = true; goto default; default: if (blnJeSense && r.Depth == 2 && !(r.Name == "sense")) { xw.WriteEndElement(); //senses blnJeSense = false; } if (blnJeSenseGrp && r.Depth == 2 && !r.Name.StartsWith("sense")) { blnJeSenseGrp = false; xw.WriteEndElement(); //senseGrp } DPXT.SerializeNode(r, xw); break; } } else if (r.NodeType == XmlNodeType.EndElement) { if (r.Depth == 2) { switch (r.Name) { case "senseGrp": /* * if (blnJeSense) * { * xw.WriteEndElement(); //senseGrp * blnJeSenseGrp = false; * } */ //DPXT.SerializeNode(r, xw); break; case "sense": DPXT.SerializeNode(r, xw); break; default: if (blnJeSense) { xw.WriteEndElement(); //senses blnJeSense = false; } DPXT.SerializeNode(r, xw); break; } } else { DPXT.SerializeNode(r, xw); } } else { DPXT.SerializeNode(r, xw); } } } catch (Exception ex) { sChyba = ex.Message; sChyba = r.ReadInnerXml(); while (sChyba.Trim().Length == 0) { if (r.Read()) { sChyba = r.ReadInnerXml(); } else { sChyba = "XmlReader je na konci souboru."; } } Console.WriteLine(sChyba); } finally { if (xw.WriteState != WriteState.Error && xw.WriteState != WriteState.Closed) { xw.WriteEndDocument(); } xw.Flush(); xw.Close(); } } } }
public static void HeslarXml(string strVstupniSoubor, string strVystupniSoubor) { char[] chIndexy = schIndexy; char[] chSeparatory = schSeparatory; using (XmlReader r = Objekty.VytvorXmlReader(strVstupniSoubor)) { using (XmlWriter xwHeslar = Objekty.VytvorXmlWriter(strVystupniSoubor)) { xwHeslar.WriteStartDocument(true); xwHeslar.WriteStartElement("heslar"); #region WHILE while (r.Read()) { if (r.NodeType == XmlNodeType.Element) { #region SWITCH switch (r.Name) { case "dictionary": string sSource = r.GetAttribute("name"); xwHeslar.WriteAttributeString("dictionary", sSource); break; case "div1": xwHeslar.WriteStartElement("pismeno"); xwHeslar.WriteAttributeString("id", r.GetAttribute("id")); xwHeslar.WriteAttributeString("text", r.GetAttribute("text")); break; /* * case "entryref": * iHw = 0; * xwHeslar.WriteStartElement("heslovaStat"); * sIdEntry = r.GetAttribute("id"); * xwHeslar.WriteAttributeString("id", sIdEntry); * xwHeslar.WriteAttributeString("type", "ref"); * break; */ case "entry": //iHw = 0; xwHeslar.WriteStartElement("heslovaStat"); Transformace.SerializeAttributes(r, xwHeslar, false); //sIdEntry = r.GetAttribute("id"); //xwHeslar.WriteAttributeString("id", sIdEntry); //string sTypEntry = r.GetAttribute("type"); //if (null != sTypEntry) // xwHeslar.WriteAttributeString("type", sTypEntry); break; case "hwo": case "hw": //zkontrolovat, jestli odstavec obsahuje "nenáležitá podoba" - a pak heslo vyřadit/označit jako interní //jenže akce následuje až za heslovým slovem string sForma = r.GetAttribute("form"); string sHom = r.GetAttribute("hom"); Transformace.SerializeNode(r, xwHeslar); string strHeslo = r.ReadString(); strHeslo = strHeslo.Trim(); for (int i = 0; i < chIndexy.Length; i++) { if (strHeslo.Contains(chIndexy[i].ToString())) { strHeslo = strHeslo.Remove(strHeslo.IndexOf(chIndexy[i]), 1); if (sHom == null) { xwHeslar.WriteAttributeString("hom", chIndexy[i].ToString()); //je potřeba to zapisovat, nebo ne? } break; } } if (strHeslo.IndexOf('-') == strHeslo.Length - 1 || strHeslo.IndexOf('-') == 0) { if (sForma == null) { xwHeslar.WriteAttributeString("form", "short"); } } if (strHeslo.Contains("(?)")) { strHeslo = strHeslo.Replace("(?)", ""); //otazník v závorce za heslem } strHeslo = strHeslo.TrimEnd(chSeparatory); strHeslo = strHeslo.TrimEnd(); //strHeslo = strHeslo.TrimEnd(chIndexy); if (strHeslo.Length > 0) { char chPismeno = strHeslo[0]; if (chPismeno == '*' || chPismeno == '\u02E3') // || chPismeno == '\u02DF') - zobrazovalo se špatně v IE //nemělo by se takové heslo upravit tak, že se odstraní první znak? { xwHeslar.WriteAttributeString("pref", strHeslo.Substring(0, 1)); } xwHeslar.WriteString(strHeslo); } /* * while (r.Name != "") * { * r.Read(); * } * SerializeNode(r, xwHeslar); */ /* * string sTyp = r.GetAttribute("type"); * string strHeslo = r.ReadString(); * strHeslo = strHeslo.Trim(); * strHeslo = strHeslo.TrimEnd(chSeparatory); * strHeslo = strHeslo.TrimEnd(); * string[] aHesla = strHeslo.Split(chSeparatory); * foreach (string s in aHesla) { * string sText = s.Trim(); * if (s.Length > 0) { * xwHeslar.WriteStartElement("hw"); * if (sTyp != null) * xwHeslar.WriteAttributeString("type",sTyp); ++iHw; * xwHeslar.WriteAttributeString("id", sIdEntry + ".hw" + iHw.ToString()); * * xwHeslar.WriteString(sText); * xwHeslar.WriteEndElement(); * } * } */ break; } #endregion } #region IF2 if (r.NodeType == XmlNodeType.EndElement) { switch (r.Name) { case "div1": xwHeslar.WriteEndElement(); break; case "entry": xwHeslar.WriteEndElement(); break; case "hwo": case "hw": xwHeslar.WriteEndElement(); break; } } #endregion } #endregion } } }
public static void HeslarXml(string strVstupniSoubor, string strVystupniSoubor, Dictionary <string, ZpracovatTagProHeslarXml> gztTagyZpracovani) { char[] chIndexy = schIndexy; char[] chSeparatory = schSeparatory; using (XmlReader r = Objekty.VytvorXmlReader(strVstupniSoubor)) { using (XmlWriter xwHeslar = Objekty.VytvorXmlWriter(strVystupniSoubor)) { xwHeslar.WriteStartDocument(true); xwHeslar.WriteStartElement("heslar"); string strNazevTagu = null; HesloInfo hiHeslo = null; PismenoInfo piPismeno = null; HeslovaStatInfo hsiHeslovaStat = null; #region WHILE while (r.Read()) { strNazevTagu = r.Name; if (r.NodeType == XmlNodeType.Element) { if (gztTagyZpracovani != null && gztTagyZpracovani.ContainsKey(strNazevTagu)) { gztTagyZpracovani[strNazevTagu](r, xwHeslar, piPismeno, hsiHeslovaStat, hiHeslo); } else { #region SWITCH switch (r.Name) { case "dictionary": string sSource = r.GetAttribute("name"); xwHeslar.WriteAttributeString("dictionary", sSource); break; case "div1": piPismeno = new PismenoInfo(); piPismeno.Id = r.GetAttribute("id"); piPismeno.Text = r.GetAttribute("text"); VypisZacatekPismene(xwHeslar, piPismeno); break; /* * case "entryref": * iHw = 0; * xwHeslar.WriteStartElement("heslovaStat"); * sIdEntry = r.GetAttribute("id"); * xwHeslar.WriteAttributeString("id", sIdEntry); * xwHeslar.WriteAttributeString("type", "ref"); * break; */ case "entry": //iHw = 0; hsiHeslovaStat = new HeslovaStatInfo(); hsiHeslovaStat.Id = r.GetAttribute("id"); hsiHeslovaStat.Typ = r.GetAttribute("type"); xwHeslar.WriteStartElement("heslovaStat"); Transformace.SerializeAttributes(r, xwHeslar, false); //sIdEntry = r.GetAttribute("id"); //xwHeslar.WriteAttributeString("id", sIdEntry); //string sTypEntry = r.GetAttribute("type"); //if (null != sTypEntry) // xwHeslar.WriteAttributeString("type", sTypEntry); break; case "hw": //zkontrolovat, jestli odstavec obsahuje "nenáležitá podoba" - a pak heslo vyřadit/označit jako interní //jenže akce následuje až za heslovým slovem string sForma = r.GetAttribute("form"); Transformace.SerializeNode(r, xwHeslar); string strHeslo = r.ReadString(); strHeslo = strHeslo.Trim(); for (int i = 0; i < chIndexy.Length; i++) { if (strHeslo.Contains(chIndexy[i].ToString())) { strHeslo = strHeslo.Remove(strHeslo.IndexOf(chIndexy[i]), 1); //xwHeslar.WriteAttributeString("hom", chIndexy[i].ToString()); break; } } if (strHeslo.IndexOf('-') == strHeslo.Length - 1 || strHeslo.IndexOf('-') == 0) { if (sForma == null) { xwHeslar.WriteAttributeString("form", "short"); } } if (strHeslo.Contains("(?)")) { strHeslo = strHeslo.Replace("(?)", ""); //otazník v závorce za heslem } strHeslo = strHeslo.TrimEnd(chSeparatory); strHeslo = strHeslo.TrimEnd(); //strHeslo = strHeslo.TrimEnd(chIndexy); if (strHeslo.Length > 0) { char chPismeno = strHeslo[0]; if (chPismeno == '*' || chPismeno == '\u02E3') // || chPismeno == '\u02DF') - zobrazovalo se špatně v IE //nemělo by se takové heslo upravit tak, že se odstraní první znak? { xwHeslar.WriteAttributeString("pref", strHeslo.Substring(0, 1)); } xwHeslar.WriteString(strHeslo); } break; } #endregion } } #region IF2 if (r.NodeType == XmlNodeType.EndElement) { if (gztTagyZpracovani != null && gztTagyZpracovani.ContainsKey(strNazevTagu)) { gztTagyZpracovani[strNazevTagu](r, xwHeslar, piPismeno, hsiHeslovaStat, hiHeslo); } else { switch (r.Name) { case "div1": xwHeslar.WriteEndElement(); break; case "entry": xwHeslar.WriteEndElement(); break; case "hw": xwHeslar.WriteEndElement(); break; } } } #endregion } #endregion } } }