コード例 #1
0
        public OldInformationFile(UploadedFile uf)
        {
            this.UploadedFile = uf;

            InitializationXmlData(uf.OldXmlData);
        }
コード例 #2
0
        private bool ReadAndRewriteXmlData(UploadedFile uploadedFile)
        {
            XmlDocument doc = new XmlDocument();

            try
            {
                using (MemoryStream zipToOpen = new MemoryStream(uploadedFile.FileContent))
                {
                    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
                    {
                        //////////////////////////app.xml////////////////////////////////////////
                        //берем конкретный файл который нужно считать
                        ZipArchiveEntry readmeEntry = archive.GetEntry("docProps/app.xml");

                        //считвываем поток из конкретного файла
                        System.IO.Stream entryStream = readmeEntry.Open();
                        doc = new XmlDocument();
                        //передаем паток для обработки xml файлов
                        doc.Load(entryStream);

                        // получим корневой элемент
                        System.Xml.XmlElement root = doc.DocumentElement;

                        // обход всех узлов в корневом элементе до изменения данных
                        foreach (System.Xml.XmlNode childnode in root.ChildNodes)
                        {
                            uploadedFile.OldXmlData.Add(childnode.Name, childnode.InnerText);
                        }
                        /////////////////////////////core.xml/////////////////////////////////////

                        //берем конкретный файл который нужно считать и модефицировать
                        readmeEntry = archive.GetEntry("docProps/core.xml");

                        //считвываем поток из конкретного файла
                        entryStream = readmeEntry.Open();
                        //передаем паток для обработки xml файлов
                        doc.Load(entryStream);

                        //создаем менеджер пространств имен и описываем его
                        XmlNamespaceManager xs = new XmlNamespaceManager(doc.NameTable);
                        xs.AddNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties");
                        xs.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
                        xs.AddNamespace("dcterms", "http://purl.org/dc/terms/");
                        xs.AddNamespace("dcmitype", "http://purl.org/dc/dcmitype/");
                        xs.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

                        // получим корневой элемент
                        root = doc.DocumentElement;

                        // обход всех узлов в корневом элементе до изменения данных
                        foreach (System.Xml.XmlNode childnode in root.ChildNodes)
                        {
                            uploadedFile.OldXmlData.Add(childnode.Name, childnode.InnerText);
                        }

                        //////////////////////МОДЕФИЦИРУЕМ УЗЛЫ///////////////////
                        //the tag - dc:title
                        XmlNode myNode = root.SelectSingleNode("dc:title", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "The best title";
                        }

                        //the tag - dc:subject
                        myNode = root.SelectSingleNode("dc:subject", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "Some a new subject of the article";
                        }

                        //the tag - dc:creator
                        myNode = root.SelectSingleNode("dc:creator", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "The king of rings";
                        }

                        //the tag - cp:keywords
                        myNode = root.SelectSingleNode("cp:keywords", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "blablabla";
                        }

                        //the tag - dc:description
                        myNode = root.SelectSingleNode("dc:description", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "A new description this document";
                        }

                        //the tag - cp:lastModifiedBy
                        myNode = root.SelectSingleNode("cp:lastModifiedBy", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = "It is Alex!!!!!!!!!!!!!!!!";
                        }

                        //the tag - cp:revision
                        myNode = root.SelectSingleNode("cp:revision", xs);
                        if (myNode != null)
                        {
                            myNode.InnerText = new Random().Next(1, 1000).ToString();
                        }

                        //the tag - dcterms:created
                        myNode = root.SelectSingleNode("dcterms:created", xs);
                        DateTimeOffset dateTimeOffset;
                        if (myNode != null)
                        {
                            dateTimeOffset   = DateTimeOffset.ParseExact(myNode.InnerText.ToString(), "yyyy-MM-dd'T'HH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);
                            myNode.InnerText = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ssZ");
                        }

                        //the tag - dcterms:modified
                        myNode = root.SelectSingleNode("dcterms:modified", xs);
                        if (myNode != null)
                        {
                            dateTimeOffset   = DateTimeOffset.ParseExact(myNode.InnerText.ToString(), "yyyy-MM-dd'T'HH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);
                            myNode.InnerText = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ssZ");
                        }
                    }
                }

                using (MemoryStream zipStream = new MemoryStream())
                {
                    //считали данные в поток
                    zipStream.Write(uploadedFile.FileContent, 0, uploadedFile.FileContent.Length);

                    using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Update))
                    {
                        archive.GetEntry("docProps/core.xml").Delete();

                        ZipArchiveEntry readmeEntry = archive.CreateEntry("docProps/core.xml");

                        string strFromDoc = doc.InnerXml.ToString();
                        Console.WriteLine(strFromDoc);
                        using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                        {
                            writer.WriteLine(strFromDoc);
                        }
                    }
                    uploadedFile.FileContent = zipStream.ToArray();
                }
            }
            catch (InvalidDataException ex)
            {
                return(false);
            }

            return(true);
        }
コード例 #3
0
        public OldInformationFile(Dictionary <string, string> information, UploadedFile uf = null)
        {
            this.UploadedFile = uf;

            InitializationXmlData(information);
        }