private static void VypisZacatekPismene(XmlWriter xwHeslar, PismenoInfo pi) { xwHeslar.WriteStartElement("pismeno"); xwHeslar.WriteAttributeString("id", pi.Id); xwHeslar.WriteAttributeString("text", pi.Text); }
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 } } }