private static string RozdelitBibliNaKnihyAKapitoly(string strVstup, IExportNastaveni emnNastaveni, string strNazev, int iPoradi) { string strVystup = Path.Combine(emnNastaveni.DocasnaSlozka, String.Format(cstrNazevVystupuFormat, strNazev, iPoradi)); using (XmlReader xr = XmlReader.Create(strVstup)) { using (XmlWriter xw = XmlWriter.Create(strVystup)) { StrukturaBible sbBible = new StrukturaBible(); string sKonecKapitoly = null; while (xr.Read()) { if (xr.NodeType == XmlNodeType.Element) { string sNazev = xr.Name; switch (sNazev) { /* case "anchor": string sTyp = xr.GetAttribute("type"); string sPodtyp = xr.GetAttribute("subtype"); string sId = xr.GetAttribute("xml:id"); break; */ case "div": XmlDocument xdc = Pomucky.Xml.Objekty.ReadNodeAsXmlDocument(xr); XmlNodeList xnlp = xdc.SelectNodes("//p"); Dictionary<XmlNode, KrajniStrukturyBible> dcOdstavecMisto = new Dictionary<XmlNode, KrajniStrukturyBible>(); if (xnlp != null) { if (xnlp.Count > 1) { List<XmlNodeList> xnlpb = new List<XmlNodeList>(); List<XmlNodeList> xnlpc = new List<XmlNodeList>(); List<XmlNodeList> xnlpv = new List<XmlNodeList>(); foreach (XmlNode node in xnlp) { XmlNodeList nlpb = node.SelectNodes(".//anchor[@type='bible' and @subtype = 'book']"); xnlpb.Add(nlpb); XmlNodeList nlpc = node.SelectNodes(".//anchor[@type='bible' and @subtype = 'chapter']"); xnlpc.Add(nlpc); XmlNodeList nlpv = node.SelectNodes(".//anchor[@type='bible' and @subtype = 'verse']"); xnlpv.Add(nlpv); StrukturaBible sb1 = new StrukturaBible(); if (nlpb != null) sb1.Kniha = StrukturaBible.ZiskejUdajZAtributu(nlpb[0].Attributes["xml:id"].Value); if (nlpc != null) sb1.Kapitola = StrukturaBible.ZiskejUdajZAtributu(nlpc[0].Attributes["xml:id"].Value); if (nlpv != null) sb1.Vers = StrukturaBible.ZiskejUdajZAtributu(nlpv[0].Attributes["xml:id"].Value); StrukturaBible sbp = new StrukturaBible(); if (nlpb != null) sbp.Kniha = StrukturaBible.ZiskejUdajZAtributu(nlpb[nlpb.Count - 1].Attributes["xml:id"].Value); if (nlpc != null) sbp.Kapitola = StrukturaBible.ZiskejUdajZAtributu(nlpc[nlpc.Count - 1].Attributes["xml:id"].Value); if (nlpv != null) sbp.Vers = StrukturaBible.ZiskejUdajZAtributu(nlpv[nlpc.Count - 1].Attributes["xml:id"].Value); KrajniStrukturyBible ksb = new KrajniStrukturyBible(sb1, sbp); dcOdstavecMisto.Add(node, ksb); } bool bCoOdstavecToKapitola = false; foreach (KeyValuePair<XmlNode, KrajniStrukturyBible> kvp in dcOdstavecMisto) { if (kvp.Value.Zacatek.Kapitola == kvp.Value.Konec.Kapitola) { bCoOdstavecToKapitola = true; } else { bCoOdstavecToKapitola = false; break; } } if (bCoOdstavecToKapitola) { foreach (KeyValuePair<XmlNode, KrajniStrukturyBible> kvp in dcOdstavecMisto) { xw.WriteStartElement("div"); xw.WriteAttributeString("type", "bible"); xw.WriteAttributeString("subtype", "chapter"); xw.WriteAttributeString("n", kvp.Value.Zacatek.Kapitola); xw.WriteAttributeString("xml", "id", "http://www.w3.org/XML/1998/namespace", new StrukturaBible(kvp.Value.Zacatek.Kniha, kvp.Value.Zacatek.Kapitola).IdentifikatorXml(VypisStruktury.Kapitola) ); kvp.Key.WriteTo(xw); xw.WriteEndElement(); //div } break; } } } XmlNodeList xnlb = xdc.SelectNodes("//anchor[@type='bible' and @subtype = 'book']"); XmlNodeList xnlc = xdc.SelectNodes("//anchor[@type='bible' and @subtype = 'chapter']"); XmlNodeList xnlv = xdc.SelectNodes("//anchor[@type='bible' and @subtype = 'verse']"); if (xnlb != null && xnlb.Count > 0) { string sKniha = null; XmlNode xnb = xnlb[0]; if (xnb.Attributes != null) sKniha = xnb.Attributes.GetNamedItem("xml:id").Value; sKniha = StrukturaBible.ZiskejUdajZAtributu(sKniha); if (sbBible.Kniha != sKniha) { if (sbBible.Kniha != null) { xw.WriteEndElement(); //div } sbBible.Kniha = sKniha; xw.WriteStartElement("div"); //xw.WriteAttributeString("type", "book"); xw.WriteAttributeString("type", "bible"); xw.WriteAttributeString("subtype", "book"); xw.WriteAttributeString("n", sKniha); xw.WriteAttributeString("xml", "id", "http://www.w3.org/XML/1998/namespace", sbBible.IdentifikatorXml(VypisStruktury.Kniha)); /* XmlAttribute xa = xdc.CreateAttribute("type"); xa.Value = "book"; XmlAttribute xan = xdc.CreateAttribute("n"); xan.Value = sKniha; XmlAttribute xaid = xdc.CreateAttribute("xml", "id", "http://www.w3.org/XML/1998/namespace"); xaid.Value = StrukturaBible.IdentifikatorXml(sKniha); xdc.DocumentElement.Attributes.Append(xa); xdc.DocumentElement.Attributes.Append(xan); xdc.DocumentElement.Attributes.Append(xaid); */ } foreach (XmlNode node in xnlb) { if (node.ParentNode != null) node.ParentNode.RemoveChild(node); } } if (xnlv != null) if (xnlc != null && xnlv.Count > 0) { string sKonec = null; XmlNode xnck = xnlc[xnlc.Count - 1]; if (xnck.Attributes != null) sKonec = xnck.Attributes.GetNamedItem("xml:id").Value; sKonec = StrukturaBible.ZiskejUdajZAtributu(sKonec); XmlNode xncz = xnlc[0]; if (xncz.Attributes != null) { string sZacatekKapitoly = xncz.Attributes.GetNamedItem("xml:id").Value; sZacatekKapitoly = StrukturaBible.ZiskejUdajZAtributu(sZacatekKapitoly); sbBible.Kapitola = sZacatekKapitoly; if (sZacatekKapitoly == sKonec) { if (sKonec != sKonecKapitoly) { /* XmlAttribute xat = xdc.CreateAttribute("type"); xat.Value = "chapter"; xdc.DocumentElement.Attributes.Append(xat); */ XmlAttribute xat = xdc.CreateAttribute("type"); xat.Value = "bible"; XmlNode xde = xdc.DocumentElement; if (xde != null) { if (xde.Attributes != null) xde.Attributes.Append(xat); xat = xdc.CreateAttribute("subtype"); xat.Value = "chapter"; if (xde.Attributes != null) xde.Attributes.Append(xat); XmlAttribute xan = xdc.CreateAttribute("n"); xan.Value = sZacatekKapitoly; if (xde.Attributes != null) xde.Attributes.Append(xan); XmlAttribute xaid = xdc.CreateAttribute("xml", "id", "http://www.w3.org/XML/1998/namespace"); xaid.Value = sbBible.IdentifikatorXml(VypisStruktury.Kapitola); if (xde.Attributes != null) xde.Attributes.Append(xaid); } } foreach (XmlNode node in xnlc) { if (node.ParentNode != null) node.ParentNode.RemoveChild(node); } } else { XmlElement xe = VytvoritAnchorChapterStart(xdc, sbBible, sZacatekKapitoly); if (xdc.DocumentElement != null) xdc.DocumentElement.InsertBefore(xe, xdc.DocumentElement.FirstChild); bool bBylKonec = false; foreach (XmlNode node in xnlc) { if (node.Attributes != null) { string sk = StrukturaBible.ZiskejUdajZAtributu(node.Attributes.GetNamedItem("xml:id").Value); if (!bBylKonec && sk == sKonec) { bBylKonec = true; XmlElement xche = VytvoritAnchorChapterEnd(xdc, sbBible, sZacatekKapitoly); XmlElement xchs = VytvoritAnchorChapterStart(xdc, sbBible, sKonec); if (node.ParentNode != null) { node.ParentNode.InsertBefore(xche, node); node.ParentNode.InsertBefore(xchs, node); } } } if (node.ParentNode != null) node.ParentNode.RemoveChild(node); } } } sKonecKapitoly = sKonec; } xdc.WriteTo(xw); /* if (xnlc != null && xnlv.Count > 0) { xw.WriteEndElement(); //<div type='chapter'> } */ break; default: Pomucky.Xml.Transformace.SerializeNode(xr, xw); break; } } else if (xr.NodeType == XmlNodeType.EndElement) { Pomucky.Xml.Transformace.SerializeNode(xr, xw); } else { Pomucky.Xml.Transformace.SerializeNode(xr, xw); } } } } return strVystup; }