Exemple #1
0
        /// <summary>
        /// получить тему по идентификатору
        /// </summary>
        /// <param name="idTheme">идентификатор темы
        private ItemThemeForXSLT GetTheme(Guid _id)
        {
            if (_id == null)
            {
                throw new ArgumentNullException();
            }

            ItemThemeForXSLT theme = (ItemThemeForXSLT)itemsAdapter.GetCourseItem(_id);

            if (theme == null)
            {
                throw new Exception("Не найдена тема с идентификатором: " + _id);
            }

            return(theme);
        }
        /// <summary>
        /// выполнить конвертацию тем
        /// </summary>
        public void Do()
        {
            try
            {
                SendMessage("\n- Конвертация тестов");

                XslCompiledTransform xslt = new XslCompiledTransform();
                xslt.Load(convParams.TestShemePath);

                foreach (XElement tt in tests)
                {
                    usedIdentifers = new List <string>();

                    Guid idTest = Guid.Parse(tt.Element(NodeNames.IDENTIFER).Value);

                    ItemTestForXSLT test = (ItemTestForXSLT)itemsAdapter.GetCourseItem(idTest);
                    if (test == null)
                    {
                        throw new Exception("Не найден тест с идентификатором: " + idTest);
                    }

                    XDocument testDoc = XDocument.Load(test.XMLFilePath);
                    if (testDoc == null)
                    {
                        throw new Exception("Не удается загрузить тест " + idTest + ": " + test.XMLFilePath);
                    }

                    CorrectTest(testDoc);



                    string outFile = Path.Combine(convParams.OutItemsPath, test.FileName + ".html");

                    string testFilesNewPath = Path.Combine(convParams.OutMediaFiles.AsPath(), test.FileName).AsPath();

                    DirectoryHelper.CreateDirectory(testFilesNewPath, false);


                    ///SAXON
                    Processor proc  = new Processor();
                    XdmNode   input = proc.NewDocumentBuilder().Build(testDoc.Root.CreateReader());

                    XsltTransformer transformer = proc.NewXsltCompiler().Compile(new Uri(convParams.TestShemePath)).Load();
                    transformer.InitialContextNode = input;

                    transformer.SetParameter(new QName("", "", "mediaFolderName"), new XdmAtomicValue(convParams.CourseDataFolderName));
                    transformer.SetParameter(new QName("", "", "currentFolderName"), new XdmAtomicValue(test.FileName));

                    ///задать адрес директории для xsl:result-document
                    transformer.BaseOutputUri = new Uri(testFilesNewPath);
                    Serializer serializer = new Serializer();

                    serializer.SetOutputFile(outFile);

                    transformer.Run(serializer);


                    CopyTestFiles(test, testFilesNewPath);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Исключение при конвертации теста курса: " + ex.Message);
            }
        }