/// <summary> /// Получить ссылку на объект контейнера с заполненными данными /// </summary> /// <param name="mapXml">Карта</param> /// <param name="szv3Xml">Сводная ведомость</param> /// <param name="szv2XmlArray">Описи пакетов</param> /// <param name="szv1XmlArray">Документы СЗВ-1</param> /// <param name="diskKey">Ключ</param> /// <param name="diskTable">Таблица</param> /// <returns></returns> public static CompoundFile MakeContainer(XmlDocument mapXml, XmlDocument szv3Xml, IEnumerable <XmlDocument> szv2XmlArray, IEnumerable <IEnumerable <XmlDocument> > szv1XmlArray, byte[] diskKey, byte[] diskTable) { XmlElement rootMap = mapXml[MapXml.tagTopics]; XmlElement svodRootMap = rootMap[MapXml.tagSvod]; XmlNodeList lists = rootMap.GetElementsByTagName(MapXml.tagTopics); if (lists.Count != szv2XmlArray.Count() || lists.Count != szv1XmlArray.Count()) { return(null); } CompoundFile container = new CompoundFile(CFSVersion.Ver_3, false, false); CFStorage dir4 = container.RootStorage.AddStorage(rootMap.GetAttribute(MapXml.paramID)); for (int i = 0; i < szv2XmlArray.Count(); i++) { XmlElement curList = lists[i] as XmlElement; XmlElement curOpis = curList[MapXml.tagOpis]; CFStorage curDir = dir4.AddStorage(curList.GetAttribute(MapXml.paramID)); XmlDocument szv2Xml = szv2XmlArray.ElementAt(i); CFStream opisStream = AddStream(curDir, szv2Xml, diskKey, diskTable); curOpis[MapXml.tagFilename].InnerText = opisStream.Name; XmlNodeList docs = curList.GetElementsByTagName(MapXml.tagTopic); if (docs.Count != szv1XmlArray.ElementAt(i).Count()) { continue; } for (int j = 0; j < szv1XmlArray.ElementAt(i).Count(); j++) { /*if (i >= 10 && j >= 51) * { * Console.WriteLine("Packet {0}, Doc {1}", i, j); * }*/ XmlDocument szv1Xml = szv1XmlArray.ElementAt(i).ElementAt(j); XmlElement curDoc = docs[j] as XmlElement; CFStream docStream = AddStream(curDir, szv1Xml, diskKey, diskTable); curDoc[MapXml.tagFilename].InnerText = docStream.Name; } } CFStream svod = AddStream(dir4, szv3Xml, diskKey, diskTable); svodRootMap[MapXml.tagFilename].InnerText = svod.Name; CFStream map = container.RootStorage.AddStream("map"); SetDataToStream(map, mapXml.InnerXml, diskKey, diskTable); CFStorage styleDir = container.RootStorage.AddStorage("styles"); CFStream mapStyleStream = styleDir.AddStream("map_style"); CFStream szv1StyleStream = styleDir.AddStream("szv_style"); CFStream szv3StyleStream = styleDir.AddStream("svod_style"); CFStream szv2StyleStream = styleDir.AddStream("szv_opis_style"); SetDataToStream(mapStyleStream, File.ReadAllBytes(MapXml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv1StyleStream, File.ReadAllBytes(Szv1Xml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv3StyleStream, File.ReadAllBytes(Szv3Xml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv2StyleStream, File.ReadAllBytes(Szv2Xml.GetXslUrl()), diskKey, diskTable); return(container); }