示例#1
0
        private String compareDocs(XdmNode doc1, XdmNode doc2)
        {
            try {
                XsltTransformer t = xmlComparer.Load();
                t.InitialTemplate = new QName("", "compare");
                t.SetParameter(new QName("", "actual"), doc1);
                t.SetParameter(new QName("", "gold"), doc2);
                t.SetParameter(new QName("", "debug"), new XdmAtomicValue(debug));

                StringWriter sw = new StringWriter();
                Serializer   sr = new Serializer();
                sr.SetOutputWriter(sw);

                t.Run(sr);
                String result = sw.ToString();
                if (result.StartsWith("true"))
                {
                    return("OK");
                }
                else
                {
                    return("XML comparison - not equal");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("***" + e.Message);
                return("XML comparison failure: " + e.Message);
            }
        }
示例#2
0
    /**
     * Show the that a transformer can be reused, and show resetting
     * a parameter on the transformer.
     */
    public static void ExampleTransformerReuse(String sourceUri, String xsltUri)
    {
        // Create a Processor instance.
        Processor processor = new Processor();

        // Load the source document
        XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));

        // Compile the stylesheet
        XsltExecutable exec = processor.NewXsltCompiler().Compile(new Uri(xsltUri));

        // Create a transformer
        XsltTransformer transformer = exec.Load();

        // Run it once
        transformer.SetParameter(new QName("", "", "a-param"), new XdmAtomicValue("hello to you!"));
        transformer.InitialContextNode = input;
        XdmDestination results = new XdmDestination();

        transformer.Run(results);
        Console.WriteLine("1: " + results.XdmNode.StringValue);

        // Run it again
        transformer.SetParameter(new QName("", "", "a-param"), new XdmAtomicValue("hello to me!"));
        transformer.InitialContextNode = input;
        results.Reset();
        transformer.Run(results);
        Console.WriteLine("2: " + results.XdmNode.StringValue);
    }
示例#3
0
        private void SetParams(ref XsltTransformer transformer, KeyValuePair <string, object>[] arguments)
        {
            foreach (var arg in arguments)
            {
                var xmlArg = arg.Value as XmlReader;
                if (xmlArg != null)
                {
                    transformer.SetParameter(new QName(arg.Key), _builder.Build(xmlArg));
                    continue;
                }

                if (arg.Value is int)
                {
                    transformer.SetParameter(new QName(arg.Key), new XdmAtomicValue((int)arg.Value));
                    continue;
                }

                var sArg = arg.Value as string;
                if (sArg != null)
                {
                    transformer.SetParameter(new QName(arg.Key), new XdmAtomicValue(sArg));
                    continue;
                }

                // If we get here then the parameter is unrecognized, so let the developer know.
                throw new NotImplementedException($"In {nameof(arguments)}, the conversion for the type '{arg.Value.GetType().Name}' of the value from '{arg.Key}' has not yet been implemented.");
            }
        }
示例#4
0
    private bool compareXML(String actual, String gold)
    {
        try {
            if (xmlComparer == null)
            {
                xmlComparer = processor.NewXsltCompiler().Compile(new Uri(testSuiteDir + "/SaxonResults.net/compare.xsl"));
            }
            XdmNode         doc1 = processor.NewDocumentBuilder().Build(new Uri(actual));
            XdmNode         doc2 = processor.NewDocumentBuilder().Build(new Uri(gold));
            XsltTransformer t    = xmlComparer.Load();
            t.InitialTemplate = new QName("", "compare");
            t.SetParameter(new QName("", "actual"), doc1);
            t.SetParameter(new QName("", "gold"), doc2);

            StringWriter sw = new StringWriter();
            Serializer   sr = new Serializer();
            sr.SetOutputWriter(sw);

            t.Run(sr);
            String result = sw.ToString();
            return(result.StartsWith("true"));
        } catch (Exception e) {
            Console.WriteLine("***" + e.Message);
            return(false);
        }
    }
示例#5
0
 private static void AddArgumentList(IEnumerable <string> myArgs, XsltTransformer transformer)
 {
     foreach (string definition in myArgs)
     {
         if (definition.Contains(":"))
         {
             var pos = definition.IndexOf(":", StringComparison.Ordinal);
             transformer.SetParameter(new QName(definition.Substring(0, pos)), new XdmAtomicValue(definition.Substring(pos + 1)));
         }
         else
         {
             transformer.SetParameter(new QName(definition), new XdmAtomicValue(true));
         }
     }
 }
示例#6
0
        //run an XSLT transform.
        //transformFile is the name of the .xsl to run;
        //path is usually tools directory (be sure to include final slash in passed string)
        //takes two paramaters and corresponding values; use empty strings if not needed
        static public XmlDocument performTransformWith2Params(XmlDocument inDOM, string path, string transformFile, string param1Name, string param1Value, string param2Name, string param2Value)
        {
            // Create a Processor instance.
            Processor processor = new Processor();

            // Load the source document, building a tree
            XmlNode node  = inDOM;
            XdmNode input = processor.NewDocumentBuilder().Build(node);

            // Compile the stylesheet
            XsltExecutable exec = processor.NewXsltCompiler().Compile(new XmlTextReader(path.Replace("Program Files", "PROGRA~1") + transformFile));

            // Create a transformer
            XsltTransformer transformer = exec.Load();

            string xdmToolsPath = "file:/" + path.Replace("\\", "/").Replace(" ", "%20");

            // Run it once
            // Set parameters
            transformer.SetParameter(new QName("", "", "include-attributes"), new XdmAtomicValue(false));
            //following may be needed if xslt itself needs to find other files
            transformer.SetParameter(new QName("", "", "localBaseUri"), new XdmAtomicValue(xdmToolsPath.Replace("Program%20Files", "PROGRA~1")));
            //optionally add another parameter
            if (!String.IsNullOrEmpty(param1Name))
            {
                transformer.SetParameter(new QName("", "", param1Name), new XdmAtomicValue(param1Value));
            }
            //and another param
            if (!String.IsNullOrEmpty(param2Name))
            {
                transformer.SetParameter(new QName("", "", param2Name), new XdmAtomicValue(param2Value));
            }

            transformer.InitialContextNode = input;
            XdmDestination results = new XdmDestination();

            transformer.Run(results);

            XmlDocument resultXmlDoc = new XmlDocument();

            resultXmlDoc.LoadXml(results.XdmNode.OuterXml);
            XmlDeclaration declaration = resultXmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);

            resultXmlDoc.PrependChild(declaration);

            // return the result
            return(resultXmlDoc);
        }
示例#7
0
    /**
     * This shows how to set a parameter for use by the stylesheet. Use
     * two transformers to show that different parameters may be set
     * on different transformers.
     */
    public static void ExampleParam(String sourceUri, String xsltUri)
    {
        // Create a Processor instance.
        Processor processor = new Processor();

        // Load the source document
        XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));

        // Compile the stylesheet
        XsltExecutable exec = processor.NewXsltCompiler().Compile(new Uri(xsltUri));

        // Create two transformers with different parameters
        XsltTransformer transformer1 = exec.Load();
        XsltTransformer transformer2 = exec.Load();

        transformer1.SetParameter(new QName("", "", "a-param"), new XdmAtomicValue("hello to you!"));
        transformer2.SetParameter(new QName("", "", "a-param"), new XdmAtomicValue("goodbye to you!"));

        // Now run them both
        transformer1.InitialContextNode = input;
        XdmDestination results1 = new XdmDestination();

        transformer1.Run(results1);

        transformer2.InitialContextNode = input;
        XdmDestination results2 = new XdmDestination();

        transformer2.Run(results2);

        Console.WriteLine("1: " + results1.XdmNode.StringValue);
        Console.WriteLine("2: " + results2.XdmNode.StringValue);
    }
示例#8
0
        private string Transform(string stylesheetContent, string xmlPath, bool addErrorsPhase = false)
        {
            FileInfo xmlInfo    = new FileInfo(xmlPath);
            XdmNode  stylesheet = builder.Build(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(stylesheetContent))));

            XsltCompiler   compiler = processor.NewXsltCompiler();
            XsltExecutable exec     = compiler.Compile(stylesheet);

            XsltTransformer transformer = exec.Load();
            DomDestination  dest        = new DomDestination();

            using (var inputStream = xmlInfo.OpenRead())
            {
                if (addErrorsPhase)
                {
                    transformer.SetParameter(new QName("phase"), XdmValue.MakeValue("errors"));
                }

                transformer.SetInputStream(inputStream, new Uri(xmlInfo.DirectoryName));
                transformer.Run(dest);
            }

            using (StringWriter sw = new StringWriter())
            {
                if (dest.XmlDocument == null)
                {
                    throw new Exception("Failed to execute Schematron validation. The SCH file selected may not be the ISO version of Schematron.");
                }

                dest.XmlDocument.Save(sw);
                return(sw.ToString());
            }
        }
示例#9
0
        public void Load(string xslPath, Dictionary <string, string> paramCollection)
        {
            try
            {
                TextReader input     = new StreamReader(xslPath);
                var        directory = new FileInfo(xslPath).Directory;
                if (directory != null)
                {
                    compiler.BaseUri = new Uri(directory.FullName + "\\");
                }

                transformer = compiler.Compile(input).Load();
                // Set the parameters, if any were passed
                if (paramCollection != null)
                {
                    foreach (var param in paramCollection)
                    {
                        transformer.SetParameter(new QName("", "", param.Key), new XdmAtomicValue(param.Value));
                    }
                }

                input.Close();
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                throw;
            }
        }
示例#10
0
        public static void SimpleTransformation(String sourceUri, String xsltUri)
        {
            // Create a Processor instance.
            Processor processor = new Processor();

            // Load the source document
            XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));

            // Create a transformer for the stylesheet.
            XsltTransformer transformer =
                processor.NewXsltCompiler().Compile(new Uri(xsltUri)).Load();

            // Set the root node of the source document to be the initial context node
            transformer.InitialContextNode = input;

            // Set a parameter to the transformation
            transformer.SetParameter(new QName("", "", "greeting"),
                                     new XdmAtomicValue("hello"));

            // Create a serializer
            Serializer serializer = new Serializer();

            serializer.SetOutputWriter(Console.Out);
            serializer.SetOutputProperty(Serializer.INDENT, "yes");

            // Transform the source XML to Console.Out
            transformer.Run(serializer);
        }
      /// <summary>
      /// A generic XSL Transformation [v2.0] Class for use in ASP.NET pages
      /// </summary>

      public static string TransformXml2(string xmlPath, string xsltPath, Hashtable xsltParams, string output)
      {

          StringBuilder sb = new StringBuilder();
          StringWriter sw = new StringWriter(sb);

          try
          {
              // Create a Processor instance.
              Processor processor = new Processor();

              // Load the source document.
              XdmNode input = processor.NewDocumentBuilder().Build(new Uri(xmlPath));

              // Create a transformer for the stylesheet.
              XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltPath)).Load();

              // Set the root node of the source document to be the initial context node.
              transformer.InitialContextNode = input;

              // BaseOutputUri is only necessary for xsl:result-document (might be able to use xsl:result-document for alternative file output)
              transformer.BaseOutputUri = new Uri(xsltPath);

              //Fill XsltArgumentList if necessary - taken from key/value pairs in the hashtable
              if (xsltParams != null)
              {
                  IDictionaryEnumerator pEnumerator = xsltParams.GetEnumerator();
                  while (pEnumerator.MoveNext())
                  {
                      transformer.SetParameter(new QName("", "", pEnumerator.Key.ToString()), new XdmAtomicValue(pEnumerator.Value.ToString()));
                  }
              }

              // Create a serializer and run it over the result of the transform.
              Serializer serializer = new Serializer();
              serializer.SetOutputWriter(sw);
              transformer.Run(serializer);

              // Output method (though keep in mind this can't be written to a file if using ASP.net controls because it is not yet processed)
              if (output == "file")
              {
                  TextWriter w = new StreamWriter(@"c:\inetpub\wwwroot\output.html");
                  w.Write(sb.ToString());
                  w.Close();
              }

              return sb.ToString();
          }

          catch (Exception exp)
          {
              return exp.ToString();
          }
          finally {
              sw.Close();
          }
      }
示例#12
0
        public void TestSaxonFromFileToFileWithParameters()//string sourceUri, string xsltUri)
        {
            //SaxonController saxon = new SaxonController();

            //saxon.XmlToStream(@"D:\test.xml", @"D:\test.xsl");
            //return View();
            string sourceUri = @"D:\test.xml";
            string xsltUri   = @"D:\test.xsl";
            //Processor属于Saxon.Api
            Processor processor = new Processor();

            // Load the source document.
            XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));

            // Create a transformer for the stylesheet.
            XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltUri)).Load();

            // Set the root node of the source document to be the initial context node.
            transformer.InitialContextNode = input;

            transformer.SetParameter(new QName("", "", "maxmin"), new XdmAtomicValue("yes"));
            transformer.SetParameter(new QName("", "", "pricestock"), new XdmAtomicValue("price"));

            // BaseOutputUri is only necessary for xsl:result-document.
            transformer.BaseOutputUri = new Uri(xsltUri);



            // Create a serializer.
            Serializer serializer = new Serializer();

            //TextWriter tw = new StreamWriter();
            serializer.SetOutputWriter(Response.Output);
            //serializer.SetOutputFile(Server.MapPath(@"D:\test.html"));
            //serializer.SetOutputFile(@"D:\test.html");



            // Transform the source XML to System.out.
            transformer.Run(serializer);
        }
        /// <summary>
        /// Add parameters to a transform
        /// </summary>
        /// <param name="parameterList"></param>
        /// <param name="xslProc"></param>
        private void AddParameters(XMLUtilities.XSLParameter[] parameterList)
        {
            if (parameterList != null)
            {
                foreach (XMLUtilities.XSLParameter rParam in parameterList)
                {
                    var parameterName = new QName(rParam.Name);

                    // Following is a specially recognized parameter name
                    if (rParam.Name == "prmSDateTime")
                    {
                        var parameterValue = new XdmAtomicValue((new QName(XMLUtilities.GetCurrentDateTime(CultureToUse))));
                        m_transformer.SetParameter(parameterName, parameterValue);
                    }
                    else
                    {
                        var parameterValue = new XdmAtomicValue((new QName(rParam.Value)));
                        m_transformer.SetParameter(parameterName, parameterValue);
                    }
                }
            }
        }
示例#14
0
文件: Program.cs 项目: daisy/amis
        static void Main(string[] args)
        {
            string infile     = @"c:\daisybooks\verysimplebook\verysimplebook.xml";
            string infile_dir = @"c:\daisybooks\verysimplebook\";
            string xsltfile   = @"c:\devel\amis\trunk\amis\bin\xslt\dtbook\dtbook2xhtml.xsl";
            string outfile    = @"c:\devel\amis\sandbox\dtbooktransformer_out.xml";

            // Create a Processor instance.
            Processor processor = new Processor();

            // Load the source document
            XdmNode input = processor.NewDocumentBuilder().Build(new Uri(infile));

            // Create a transformer for the stylesheet.
            XsltTransformer transformer =
                processor.NewXsltCompiler().Compile(new Uri(xsltfile)).Load();

            QName basedir = new QName("", "baseDir");

            List <XdmAtomicValue> elementNames = new List <XdmAtomicValue>();

            elementNames.Add(new XdmAtomicValue(infile_dir));
            XdmValue basedir_value = new XdmValue(elementNames);

            transformer.SetParameter(basedir, basedir_value);

            // Set the user-written XmlResolver
            UserXmlResolver runTimeResolver = new UserXmlResolver();

            runTimeResolver.Message      = "** Calling transformation-time XmlResolver: ";
            transformer.InputXmlResolver = runTimeResolver;

            // Set the root node of the source document to be the initial context node
            transformer.InitialContextNode = input;

            /*
             *  String outfile = "OutputFromXsltSimple2.xml";
             * Serializer serializer = new Serializer();
             * serializer.SetOutputStream(new FileStream(outfile, FileMode.Create, FileAccess.Write));
             */
            // Create a serializer, with output to the standard output stream
            Serializer serializer = new Serializer();

            serializer.SetOutputWriter(Console.Out);

            // Transform the source XML and serialize the result document
            transformer.Run(serializer);

            Console.ReadLine();
        }
示例#15
0
    /**
     * Show how to get stylesheets that are associated with a given
     * xml document via the xml-stylesheet PI (see http://www.w3.org/TR/xml-stylesheet/).
     */
    public static void ExampleUseAssociated(String sourceUri)
    {
        // Create a Processor instance.
        Processor      processor = new Processor();
        XsltExecutable exec;

        // Load the source document
        XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));

        Console.WriteLine("=============== source document ===============");
        Console.WriteLine(input.OuterXml);
        Console.WriteLine("=========== end of source document ============");

        // Navigate to the xml-stylesheet processing instruction having the pseudo-attribute type=text/xsl;
        // then extract the value of the href pseudo-attribute if present

        String path = @"/processing-instruction(xml-stylesheet)[matches(.,'type\s*=\s*[''""]text/xsl[''""]')]" +
                      @"/replace(., '.*?href\s*=\s*[''""](.*?)[''""].*', '$1')";

        XPathSelector eval = processor.NewXPathCompiler().Compile(path).Load();

        eval.ContextItem = input;
        XdmAtomicValue hrefval = (XdmAtomicValue)eval.EvaluateSingle();

        Console.WriteLine("evaluated");
        String href = hrefval.ToString();

        if (href == null || href == "")
        {
            Console.WriteLine("No suitable xml-stylesheet processing instruction found");
            return;
        }
        else if (href[0] == '#')
        {
            // The stylesheet is embedded in the source document and identified by a URI of the form "#id"

            Console.WriteLine("Locating embedded stylesheet with href = " + href);
            String idpath = "id('" + href.Substring(1) + "')";
            eval             = processor.NewXPathCompiler().Compile(idpath).Load();
            eval.ContextItem = input;
            XdmNode node = (XdmNode)eval.EvaluateSingle();
            if (node == null)
            {
                Console.WriteLine("No element found with ID " + href.Substring(1));
                return;
            }
            exec = processor.NewXsltCompiler().Compile(node);
        }
        else
        {
            // The stylesheet is in an external document

            Console.WriteLine("Locating stylesheet at uri = " + new Uri(input.BaseUri, href));

            // Fetch and compile the referenced stylesheet
            exec = processor.NewXsltCompiler().Compile(new Uri(input.BaseUri, href.ToString()));
        }

        // Create a transformer
        XsltTransformer transformer = exec.Load();

        // Run it
        transformer.SetParameter(new QName("", "", "a-param"), new XdmAtomicValue("hello to you!"));
        transformer.InitialContextNode = input;
        XdmDestination results = new XdmDestination();

        transformer.Run(results);
        Console.WriteLine("1: " + results.XdmNode.StringValue);
    }
示例#16
0
        /// <summary>
        /// выполнить конвертацию тем
        /// </summary>
        public void Do()
        {
            try
            {
                if (themes == null || themes.Count <XElement>() < 1)
                {
                    return;
                }


                //XslCompiledTransform xslt = new XslCompiledTransform();
                //xslt.Load(convParams.ThemeShemePath);

                foreach (XElement th in themes)
                {
                    SendMessage("- Конвертация темы " + th.Element(NodeNames.TITLE).Value);

                    XDocument doc = new XDocument(th);
                    string    fn  = th.Element(NodeNames.ITEM_FILE_ID).Value;
                    string    themeFilesNewPath = Path.Combine(convParams.OutMediaFiles.AsPath(), fn).AsPath();
                    string    outFile           = Path.Combine(convParams.OutItemsPath, fn + ".html");
                    ///SAXON
                    Processor proc  = new Processor();
                    XdmNode   input = proc.NewDocumentBuilder().Build(doc.Root.CreateReader());

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

                    transformer.SetParameter(new QName("", "", "mediaPath"), new XdmAtomicValue(convParams.CourseDataFolderName));
                    transformer.SetParameter(new QName("", "", "picFolder"), new XdmAtomicValue(th.Element(NodeNames.ITEM_FILE_ID).Value));
                    transformer.SetParameter(new QName("", "", "toolFolder"), new XdmAtomicValue(convParams.ToolsDataFolderName));

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

                    serializer.SetOutputFile(outFile);

                    transformer.Run(serializer);

                    //doc.Document.Declaration = new XDeclaration("1.0", "utf-8", "true");
                    //XPathNavigator nv = doc.CreateNavigator();

                    //XsltArgumentList xslArg = new XsltArgumentList();

                    //xslArg.AddParam("mediaPath", "", convParams.CourseDataFolderName);
                    //xslArg.AddParam("picFolder", "", th.Element(NodeNames.ITEM_FILE_ID).Value);
                    //xslArg.AddParam("toolFolder", "", convParams.ToolsDataFolderName);

                    //string outFile = Path.Combine(convParams.OutItemsPath, th.Element(NodeNames.ITEM_FILE_ID).Value + ".html");
                    //using (FileStream fs = new FileStream(outFile, FileMode.Create))
                    //{
                    //    xslt.Transform(nv, xslArg, fs);
                    //}

                    Guid             idTheme = Guid.Parse(th.Element(NodeNames.IDENTIFER).Value);
                    ItemThemeForXSLT theme   = GetTheme(idTheme);
                    CopyThemeFiles(theme);
                    DoOtherOperation(theme);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Исключение при конвертации темы курса: " + ex.Message);
            }
        }
示例#17
0
        void Run(XmlDestination destination, XsltRuntimeOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            XsltTransformer transformer = executable.Load();

            transformer.RecoveryPolicy = RecoveryPolicy.DoNotRecover;

            if (options.InputXmlResolver != null)
            {
                XmlDynamicResolver dynamicResolver = options.InputXmlResolver as XmlDynamicResolver;

                if (dynamicResolver != null &&
                    dynamicResolver.DefaultBaseUri == null)
                {
                    dynamicResolver.DefaultBaseUri = this.StaticBaseUri;
                }

                transformer.InputXmlResolver = options.InputXmlResolver;
            }

            // XsltTransformer.BaseOutputUri doesn't accept null
            if (options.BaseOutputUri != null)
            {
                transformer.BaseOutputUri = options.BaseOutputUri;
            }

            // TODO: Bug in Saxon 9.3
            //else if (this.StaticBaseUri != null && this.StaticBaseUri.IsFile)
            //   transformer.BaseOutputUri = new Uri(Path.GetDirectoryName(this.StaticBaseUri.LocalPath), UriKind.Absolute);

            try {
                if (options.InitialTemplate != null)
                {
                    transformer.InitialTemplate = new QName(options.InitialTemplate);
                }
            } catch (DynamicError err) {
                throw new SaxonException(err);
            }

            if (options.InitialMode != null)
            {
                transformer.InitialMode = new QName(options.InitialMode);
            }

            if (options.InitialContextNode != null)
            {
                XdmNode node = options.InitialContextNode.ToXdmNode(this.Processor.ItemFactory);

                BugHandler.ThrowIfBug1675(node);

                transformer.InitialContextNode = node;
            }

            foreach (var pair in options.Parameters)
            {
                var      qname    = new QName(pair.Key);
                XdmValue xdmValue = pair.Value.ToXdmValue(this.Processor.ItemFactory);

                transformer.SetParameter(qname, xdmValue);
            }

            transformer.MessageListener = new TraceMessageListener();

            try {
                transformer.Run(destination);
            } catch (DynamicError ex) {
                throw new SaxonException(ex);
            } catch (Exception ex) {
                throw new SaxonException(ex.Message, ex);
            }
        }
示例#18
0
        protected override void runTestCase(XdmNode testCase, XPathCompiler xpath)
        {
            TestOutcome outcome     = new TestOutcome(this);
            string      testName    = testCase.GetAttributeValue(new QName("name"));
            string      testSetName = testCase.Parent.GetAttributeValue(new QName("name"));

            ////
            if (testName.Equals("type-0174"))
            {
                int num = 0;
                System.Console.WriteLine("Test driver" + num);
            }

            ///
            if (exceptionsMap.ContainsKey(testName))
            {
                notrun++;
                resultsDoc.writeTestcaseElement(testName, "notRun", exceptionsMap[testName].GetAttributeValue(new QName("reason")));
                return;
            }

            if (exceptionsMap.ContainsKey(testName) || isSlow(testName))
            {
                notrun++;
                resultsDoc.writeTestcaseElement(testName, "notRun", "requires excessive resources");
                return;
            }



            XdmValue specAtt = (XdmValue)(xpath.EvaluateSingle("(/test-set/dependencies/spec/@value, ./dependencies/spec/@value)[last()]", testCase));
            string   spec    = specAtt.ToString();

            Environment env = getEnvironment(testCase, xpath);

            if (env == null)
            {
                resultsDoc.writeTestcaseElement(testName, "notRun", "test catalog error");
                return;
            }

            /*if(testName("environment-variable")) {
             *              EnvironmentVariableResolver resolver = new EnvironmentVariableResolver() {
             *          public Set<string> getAvailableEnvironmentVariables() {
             *              Set<string> strings = new HashSet<string>();
             *              strings.add("QTTEST");
             *              strings.add("QTTEST2");
             *              strings.add("QTTESTEMPTY");
             *              return strings;
             *          }
             *
             *          public string getEnvironmentVariable(string name) {
             *              if (name.Equals("QTTEST")) {
             *                  return "42";
             *              } else if (name.Equals("QTTEST2")) {
             *                  return "other";
             *              } else if (name.Equals("QTTESTEMPTY")) {
             *                  return "";
             *              } else {
             *                  return null;
             *              }
             *          }
             *      }; //TODO
             *  } */
            //   env.processor.SetProperty(JFeatureKeys.ENVIRONMENT_VARIABLE_RESOLVER, resolver); //TODO

            XdmNode testInput  = (XdmNode)xpath.EvaluateSingle("test", testCase);
            XdmNode stylesheet = (XdmNode)xpath.EvaluateSingle("stylesheet", testInput);


            foreach (XdmItem dep in xpath.Evaluate("(/test-set/dependencies/*, ./dependencies/*)", testCase))
            {
                if (!dependencyIsSatisfied((XdmNode)dep, env))
                {
                    notrun++;
                    resultsDoc.writeTestcaseElement(testName, "notRun", "dependency not satisfied");
                    return;
                }
            }

            XsltExecutable sheet = env.xsltExecutable;
            //ErrorCollector collector = new ErrorCollector();
            XmlUrlResolver res = new XmlUrlResolver();

            if (stylesheet != null)
            {
                XsltCompiler compiler = env.xsltCompiler;
                Uri          hrefFile = res.ResolveUri(stylesheet.BaseUri, stylesheet.GetAttributeValue(new QName("file")));
                Stream       stream   = new FileStream(hrefFile.AbsolutePath, FileMode.Open, FileAccess.Read);
                compiler.BaseUri             = hrefFile;
                compiler.XsltLanguageVersion = (spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0");
                try
                {
                    sheet = compiler.Compile(stream);
                } catch (Exception err) {
                    outcome.SetException(err);

                    //outcome.SetErrorsReported(collector.GetErrorCodes);
                }


                //  compiler.setErrorListener(collector);
            }

            if (sheet != null)
            {
                XdmItem contextItem     = env.contextItem;
                QName   initialMode     = getQNameAttribute(xpath, testInput, "initial-mode/@name");
                QName   initialTemplate = getQNameAttribute(xpath, testInput, "initial-template/@name");

                try {
                    XsltTransformer transformer = sheet.Load();

                    //transformer.SetURIResolver(env); //TODO
                    if (env.unparsedTextResolver != null)
                    {
                        transformer.Implementation.setUnparsedTextURIResolver(env.unparsedTextResolver);
                    }
                    if (initialTemplate != null)
                    {
                        transformer.InitialTemplate = initialTemplate;
                    }
                    if (initialMode != null)
                    {
                        transformer.InitialMode = initialMode;
                    }
                    foreach (XdmItem param in xpath.Evaluate("param", testInput))
                    {
                        string   name   = ((XdmNode)param).GetAttributeValue(new QName("name"));
                        string   select = ((XdmNode)param).GetAttributeValue(new QName("select"));
                        XdmValue value  = xpath.Evaluate(select, null);
                        transformer.SetParameter(new QName(name), value);
                    }
                    if (contextItem != null)
                    {
                        transformer.InitialContextNode = (XdmNode)contextItem;
                    }
                    if (env.streamedPath != null)
                    {
                        transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri);
                    }
                    foreach (QName varName in env.params1.Keys)
                    {
                        transformer.SetParameter(varName, env.params1[varName]);
                    }
                    //transformer.setErrorListener(collector);
                    transformer.BaseOutputUri = new Uri(resultsDir + "/results/output.xml");

                    /*transformer.MessageListener = (new MessageListener() {
                     *  public void message(XdmNode content, bool terminate, SourceLocator locator) {
                     *      outcome.addXslMessage(content);
                     *  }
                     * });*/


                    // Run the transformation twice, once for serialized results, once for a tree.
                    // TODO: we could be smarter about this and capture both

                    // run with serialization
                    StringWriter sw         = new StringWriter();
                    Serializer   serializer = env.processor.NewSerializer(sw);
                    transformer.Implementation.setOutputURIResolver(new OutputResolver(driverProc, outcome, true));


                    transformer.Run(serializer);

                    outcome.SetPrincipalSerializedResult(sw.ToString());
                    if (saveResults)
                    {
                        // currently, only save the principal result file
                        saveResultsToFile(sw.ToString(),
                                          resultsDir + "/results/" + testSetName + "/" + testName + ".out");
                    }
                    transformer.MessageListener = new TestOutcome.MessageListener(outcome);

                    // run without serialization
                    if (env.streamedPath != null)
                    {
                        transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri);
                    }
                    XdmDestination destination = new XdmDestination();
                    transformer.Implementation.setOutputURIResolver(
                        new OutputResolver(env.processor, outcome, false));
                    transformer.Run(destination);

                    //transformer. .transform();
                    outcome.SetPrincipalResult(destination.XdmNode);
                    //}
                } catch (Exception err) {
                    outcome.SetException(err);
                    //outcome.SetErrorsReported(collector.getErrorCodes());
                    // err.printStackTrace();
                    // failures++;
                    //resultsDoc.writeTestcaseElement(testName, "fail", "*** crashed " + err.Message);
                    //return;
                }
            }
            XdmNode assertion = (XdmNode)xpath.EvaluateSingle("result/*", testCase);

            if (assertion == null)
            {
                failures++;
                resultsDoc.writeTestcaseElement(testName, "fail", "No test assertions found");
                return;
            }
            XPathCompiler assertionXPath = env.processor.NewXPathCompiler();
            //assertionXPath.setLanguageVersion("3.0");
            bool success = outcome.TestAssertion(assertion, outcome.GetPrincipalResultDoc(), assertionXPath, xpath, debug);

            if (success)
            {
                if (outcome.GetWrongErrorMessage() != null)
                {
                    outcome.SetComment(outcome.GetWrongErrorMessage());
                    wrongErrorResults++;
                }
                else
                {
                    successes++;
                }
                resultsDoc.writeTestcaseElement(testName, "pass", outcome.GetComment());
            }
            else
            {
                failures++;
                resultsDoc.writeTestcaseElement(testName, "fail", outcome.GetComment());
            }
        }
示例#19
0
 public void SetParameter(string name, int iNum)
 {
     _transformer.SetParameter(new QName(name), new XdmAtomicValue(iNum));
 }
        /// <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);
            }
        }
示例#21
0
        protected override void runTestCase(XdmNode testCase, XPathCompiler xpath)
        {
            TestOutcome outcome     = new TestOutcome(this);
            string      testName    = testCase.GetAttributeValue(new QName("name"));
            string      testSetName = testCase.Parent.GetAttributeValue(new QName("name"));

            ////
            if (testName.Equals("type-0174"))
            {
                int num = 0;
                System.Console.WriteLine("Test driver" + num);
            }

            ///
            if (exceptionsMap.ContainsKey(testName))
            {
                notrun++;
                resultsDoc.writeTestcaseElement(testName, "notRun", exceptionsMap[testName].GetAttributeValue(new QName("reason")));
                return;
            }

            if (exceptionsMap.ContainsKey(testName) || isSlow(testName))
            {
                notrun++;
                resultsDoc.writeTestcaseElement(testName, "notRun", "requires excessive resources");
                return;
            }



            XdmValue specAtt = (XdmValue)(xpath.EvaluateSingle("(/test-set/dependencies/spec/@value, ./dependencies/spec/@value)[last()]", testCase));
            string   spec    = specAtt.ToString();

            Environment env = getEnvironment(testCase, xpath);

            if (env == null)
            {
                resultsDoc.writeTestcaseElement(testName, "notRun", "test catalog error");
                return;
            }

            /*if(testName("environment-variable")) {
             *              EnvironmentVariableResolver resolver = new EnvironmentVariableResolver() {
             *          public Set<string> getAvailableEnvironmentVariables() {
             *              Set<string> strings = new HashSet<string>();
             *              strings.add("QTTEST");
             *              strings.add("QTTEST2");
             *              strings.add("QTTESTEMPTY");
             *              return strings;
             *          }
             *
             *          public string getEnvironmentVariable(string name) {
             *              if (name.Equals("QTTEST")) {
             *                  return "42";
             *              } else if (name.Equals("QTTEST2")) {
             *                  return "other";
             *              } else if (name.Equals("QTTESTEMPTY")) {
             *                  return "";
             *              } else {
             *                  return null;
             *              }
             *          }
             *      }; //TODO
             *  } */
            //   env.processor.SetProperty(JFeatureKeys.ENVIRONMENT_VARIABLE_RESOLVER, resolver); //TODO

            XdmNode testInput  = (XdmNode)xpath.EvaluateSingle("test", testCase);
            XdmNode stylesheet = (XdmNode)xpath.EvaluateSingle("stylesheet", testInput);
            XdmNode pack       = (XdmNode)xpath.EvaluateSingle("package", testInput);


            foreach (XdmItem dep in xpath.Evaluate("(/test-set/dependencies/*, ./dependencies/*)", testCase))
            {
                if (!dependencyIsSatisfied((XdmNode)dep, env))
                {
                    notrun++;
                    resultsDoc.writeTestcaseElement(testName, "notRun", "dependency not satisfied");
                    return;
                }
            }

            XsltExecutable sheet = env.xsltExecutable;
            //ErrorCollector collector = new ErrorCollector();
            string         baseOutputURI       = resultsDir + "/results/output.xml";
            ErrorCollector collector           = new ErrorCollector(outcome);
            IList          errorList           = new List <StaticError> ();
            XmlUrlResolver res                 = new XmlUrlResolver();
            string         xsltLanguageVersion = spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0";

            if (stylesheet != null)
            {
                XsltCompiler compiler = env.xsltCompiler;
                compiler.ErrorList = errorList;
                Uri    hrefFile = res.ResolveUri(stylesheet.BaseUri, stylesheet.GetAttributeValue(new QName("file")));
                Stream stream   = new FileStream(hrefFile.AbsolutePath, FileMode.Open, FileAccess.Read);
                compiler.BaseUri             = hrefFile;
                compiler.XsltLanguageVersion = (spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0");

                foreach (XdmItem param in xpath.Evaluate("param[@static='yes']", testInput))
                {
                    String   name   = ((XdmNode)param).GetAttributeValue(new QName("name"));
                    String   select = ((XdmNode)param).GetAttributeValue(new QName("select"));
                    XdmValue value;
                    try {
                        value = xpath.Evaluate(select, null);
                    } catch (Exception e) {
                        Console.WriteLine("*** Error evaluating parameter " + name + ": " + e.Message);
                        //throw e;
                        continue;
                    }
                    compiler.SetParameter(new QName(name), value);
                }

                try
                {
                    sheet = compiler.Compile(stream);
                } catch (Exception err) {
                    Console.WriteLine(err.Message);
                    //Console.WriteLine(err.StackTrace);
                    IEnumerator enumerator = errorList.GetEnumerator();
                    bool        checkCur   = enumerator.MoveNext();

                    /*if (checkCur && enumerator.Current != null) {
                     *      outcome.SetException ((Exception)(enumerator.Current));
                     * } else {
                     *      Console.WriteLine ("Error: Unknown exception thrown");
                     * }*/
                    outcome.SetErrorsReported(errorList);

                    //outcome.SetErrorsReported(collector.GetErrorCodes);
                }


                //  compiler.setErrorListener(collector);
            }
            else if (pack != null)
            {
                Uri    hrefFile = res.ResolveUri(pack.BaseUri, pack.GetAttributeValue(new QName("file")));
                Stream stream   = new FileStream(hrefFile.AbsolutePath, FileMode.Open, FileAccess.Read);

                XsltCompiler compiler = env.xsltCompiler;
                compiler.ErrorList           = errorList;
                compiler.XsltLanguageVersion = (spec.Contains("XSLT30") || spec.Contains("XSLT20+") ? "3.0" : "2.0");
                //compiler.setErrorListener(collector);

                try {
                    XsltPackage xpack = compiler.CompilePackage(stream);
                    sheet = xpack.Link();
                } catch (Exception err) {
                    Console.WriteLine(err.Message);
                    IEnumerator enumerator = errorList.GetEnumerator();
                    enumerator.MoveNext();
                    outcome.SetException((Exception)(enumerator.Current));
                    outcome.SetErrorsReported(errorList);
                }
            }

            if (sheet != null)
            {
                XdmItem contextItem     = env.contextItem;
                XdmNode initialMode     = (XdmNode)xpath.EvaluateSingle("initial-mode", testInput);
                XdmNode initialFunction = (XdmNode)xpath.EvaluateSingle("initial-function", testInput);
                XdmNode initialTemplate = (XdmNode)xpath.EvaluateSingle("initial-template", testInput);

                QName initialModeName     = GetQNameAttribute(xpath, testInput, "initial-mode/@name");
                QName initialTemplateName = GetQNameAttribute(xpath, testInput, "initial-template/@name");

                if (useXslt30Transformer)
                {
                    try {
                        bool    assertsSerial         = xpath.Evaluate("result//(assert-serialization|assert-serialization-error|serialization-matches)", testCase).Count > 0;
                        bool    resultAsTree          = env.outputTree;
                        bool    serializationDeclared = env.outputSerialize;
                        XdmNode needsTree             = (XdmNode)xpath.EvaluateSingle("output/@tree", testInput);
                        if (needsTree != null)
                        {
                            resultAsTree = needsTree.StringValue.Equals("yes");
                        }
                        XdmNode needsSerialization = (XdmNode)xpath.EvaluateSingle("output/@serialize", testInput);
                        if (needsSerialization != null)
                        {
                            serializationDeclared = needsSerialization.StringValue.Equals("yes");
                        }
                        bool resultSerialized = serializationDeclared || assertsSerial;

                        if (assertsSerial)
                        {
                            String comment = outcome.GetComment();
                            comment = (comment == null ? "" : comment) + "*Serialization " + (serializationDeclared ? "declared* " : "required* ");
                            outcome.SetComment(comment);
                        }


                        Xslt30Transformer transformer = sheet.Load30();
                        transformer.InputXmlResolver = env;
                        if (env.unparsedTextResolver != null)
                        {
                            transformer.GetUnderlyingController.setUnparsedTextURIResolver(env.unparsedTextResolver);
                        }

                        Dictionary <QName, XdmValue> caseGlobalParams = GetNamedParameters(xpath, testInput, false, false);
                        Dictionary <QName, XdmValue> caseStaticParams = GetNamedParameters(xpath, testInput, true, false);
                        Dictionary <QName, XdmValue> globalParams     = new Dictionary <QName, XdmValue>(env.params1);

                        foreach (KeyValuePair <QName, XdmValue> entry in caseGlobalParams)
                        {
                            globalParams.Add(entry.Key, entry.Value);
                        }

                        foreach (KeyValuePair <QName, XdmValue> entry in caseStaticParams)
                        {
                            globalParams.Add(entry.Key, entry.Value);
                        }


                        transformer.SetStylesheetParameters(globalParams);

                        if (contextItem != null)
                        {
                            transformer.GlobalContextItem = contextItem;
                        }

                        transformer.MessageListener = collector;

                        transformer.BaseOutputURI = baseOutputURI;

                        transformer.MessageListener = new TestOutcome.MessageListener(outcome);

                        XdmValue result = null;

                        TextWriter sw = new StringWriter();

                        Serializer serializer = env.processor.NewSerializer();

                        serializer.SetOutputWriter(sw);
                        //serializer.setOutputProperty(Serializer.Property.OMIT_XML_DECLARATION, "yes");

                        OutputResolver          serializingOutput = new OutputResolver(env.processor, outcome, true);
                        net.sf.saxon.Controller controller        = transformer.GetUnderlyingController;

                        controller.setOutputURIResolver(serializingOutput);
                        XmlDestination dest = null;
                        if (resultAsTree)
                        {
                            // If we want non-serialized, we need to accumulate any result documents as trees too
                            controller.setOutputURIResolver(
                                new OutputResolver(env.processor, outcome, false));
                            dest = new XdmDestination();
                        }
                        if (resultSerialized)
                        {
                            dest = serializer;
                        }

                        Stream          src        = null;
                        Uri             srcBaseUri = new Uri("http://uri");
                        XdmNode         srcNode    = null;
                        DocumentBuilder builder2   = env.processor.NewDocumentBuilder();

                        if (env.streamedPath != null)
                        {
                            src        = new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read);
                            srcBaseUri = new Uri(env.streamedPath);
                        }
                        else if (env.streamedContent != null)
                        {
                            byte[] byteArray = Encoding.UTF8.GetBytes(env.streamedContent);
                            src = new MemoryStream(byteArray);                            //, "inlineDoc");
                            builder2.BaseUri = new Uri("http://uri");
                        }
                        else if (initialTemplate == null && contextItem != null)
                        {
                            srcNode = (XdmNode)(contextItem);
                        }

                        if (initialMode != null)
                        {
                            QName name = GetQNameAttribute(xpath, initialMode, "@name");
                            try {
                                if (name != null)
                                {
                                    transformer.InitialMode = name;
                                }
                                else
                                {
                                    controller.getInitialMode();                                       /// has the side effect of setting to the unnamed
                                }
                            } catch (Exception e) {
                                if (e.InnerException is net.sf.saxon.trans.XPathException)
                                {
                                    Console.WriteLine(e.Message);
                                    outcome.SetException(e);
                                    //throw new SaxonApiException(e.getCause());
                                }
                                else
                                {
                                    throw e;
                                }
                            }
                        }
                        if (initialMode != null || initialTemplate != null)
                        {
                            XdmNode init = (XdmNode)(initialMode == null ? initialTemplate : initialMode);
                            Dictionary <QName, XdmValue> params1         = GetNamedParameters(xpath, init, false, false);
                            Dictionary <QName, XdmValue> tunnelledParams = GetNamedParameters(xpath, init, false, true);
                            if (xsltLanguageVersion.Equals("2.0"))
                            {
                                if (!(params1.Count == 0 && tunnelledParams.Count == 0))
                                {
                                    Console.WriteLine("*** Initial template parameters ignored for XSLT 2.0");
                                }
                            }
                            else
                            {
                                transformer.SetInitialTemplateParameters(params1, false);
                                transformer.SetInitialTemplateParameters(tunnelledParams, true);
                            }
                        }


                        if (initialTemplate != null)
                        {
                            QName name = GetQNameAttribute(xpath, initialTemplate, "@name");
                            transformer.GlobalContextItem = contextItem;
                            if (dest == null)
                            {
                                result = transformer.CallTemplate(name);
                            }
                            else
                            {
                                transformer.CallTemplate(name, dest);
                            }
                        }
                        else if (initialFunction != null)
                        {
                            QName      name    = getQNameAttribute(xpath, initialFunction, "@name");
                            XdmValue[] params2 = getParameters(xpath, initialFunction);
                            if (dest == null)
                            {
                                result = transformer.CallFunction(name, params2);
                            }
                            else
                            {
                                transformer.CallFunction(name, params2, dest);
                            }
                        }
                        else
                        {
                            if (dest == null)
                            {
                                if (src != null)
                                {
                                    result = transformer.ApplyTemplates(src, srcBaseUri);
                                }
                                else
                                {
                                    result = transformer.ApplyTemplates(srcNode);
                                }
                            }
                            else
                            {
                                if (src != null)
                                {
                                    transformer.ApplyTemplates(src, dest);
                                }
                                else
                                {
                                    transformer.ApplyTemplates(srcNode, dest);
                                }
                            }
                        }

                        //outcome.SetWarningsReported(collector.getFoundWarnings());
                        if (resultAsTree && !resultSerialized)
                        {
                            result = ((XdmDestination)(dest)).XdmNode;
                        }
                        if (resultSerialized)
                        {
                            outcome.SetPrincipalSerializedResult(sw.ToString());
                        }
                        outcome.SetPrincipalResult(result);

                        if (saveResults)
                        {
                            String s = sw.ToString();
                            // If a transform result is entirely xsl:result-document, then result will be null
                            if (!resultSerialized && result != null)
                            {
                                StringWriter sw2 = new StringWriter();
                                Serializer   se  = env.processor.NewSerializer(sw2);
                                se.SetOutputProperty(Serializer.OMIT_XML_DECLARATION, "yes");
                                env.processor.WriteXdmValue(result, se);
                                se.Close();
                                s = sw2.ToString();
                            }
                            // currently, only save the principal result file in the result directory
                            saveResultsToFile(s, resultsDir + "/results/" + testSetName + "/" + testName + ".out");
                            Dictionary <Uri, TestOutcome.SingleResultDoc> xslResultDocuments = outcome.GetSecondaryResultDocuments();
                            foreach (KeyValuePair <Uri, TestOutcome.SingleResultDoc> entry in xslResultDocuments)
                            {
                                Uri    key           = entry.Key;
                                String path          = key.AbsolutePath;
                                String serialization = outcome.Serialize(env.processor, entry.Value);

                                saveResultsToFile(serialization, path);
                            }
                        }
                    } catch (Exception err) {
                        //if (err.getCause() is XPathException &&
                        //!((XPathException) err.getCause()).hasBeenReported()) {
                        //System.err.println("Unreported ERROR: " + err.getCause());
                        //}
                        outcome.SetException(err);
                        if (collector.getErrorCodes().Count > 0)
                        {
                            outcome.SetErrorsReported((IList)collector.getErrorCodes());
                        }
                        //Console.WriteLine(err.StackTrace);

                        /*if(err.getErrorCode() == null) {
                         *  int b = 3 + 4;  }
                         * if(err.getErrorCode() != null)
                         * outcome.AddReportedError(err.getErrorCode().getLocalName());
                         * } else {
                         * outcome.SetErrorsReported(collector.getErrorCodes());
                         * }*/
                    }                     /*catch (Exception err) {
                                           *    err.printStackTrace();
                                           *    failures++;
                                           *    resultsDoc.writeTestcaseElement(testName, "fail", "*** crashed " + err.getClass() + ": " + err.getMessage());
                                           *    return;
                                           * }*/
                }
                else
                {
                    try {
                        XsltTransformer transformer = sheet.Load();

                        //transformer.SetURIResolver(env); //TODO
                        if (env.unparsedTextResolver != null)
                        {
                            transformer.Implementation.setUnparsedTextURIResolver(env.unparsedTextResolver);
                        }
                        if (initialTemplate != null)
                        {
                            transformer.InitialTemplate = initialTemplateName;
                        }
                        if (initialMode != null)
                        {
                            transformer.InitialMode = initialModeName;
                        }
                        foreach (XdmItem param in xpath.Evaluate("param", testInput))
                        {
                            string   name   = ((XdmNode)param).GetAttributeValue(new QName("name"));
                            string   select = ((XdmNode)param).GetAttributeValue(new QName("select"));
                            XdmValue value  = xpath.Evaluate(select, null);
                            transformer.SetParameter(new QName(name), value);
                        }
                        if (contextItem != null)
                        {
                            transformer.InitialContextNode = (XdmNode)contextItem;
                        }
                        if (env.streamedPath != null)
                        {
                            transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri);
                        }
                        foreach (QName varName in env.params1.Keys)
                        {
                            transformer.SetParameter(varName, env.params1[varName]);
                        }
                        //transformer.setErrorListener(collector);
                        transformer.BaseOutputUri = new Uri(resultsDir + "/results/output.xml");

                        /*transformer.MessageListener = (new MessageListener() {
                         *  public void message(XdmNode content, bool terminate, SourceLocator locator) {
                         *      outcome.addXslMessage(content);
                         *  }
                         * });*/


                        // Run the transformation twice, once for serialized results, once for a tree.
                        // TODO: we could be smarter about this and capture both

                        // run with serialization
                        StringWriter sw         = new StringWriter();
                        Serializer   serializer = env.processor.NewSerializer(sw);
                        transformer.Implementation.setOutputURIResolver(new OutputResolver(driverProc, outcome, true));


                        transformer.Run(serializer);

                        outcome.SetPrincipalSerializedResult(sw.ToString());
                        if (saveResults)
                        {
                            // currently, only save the principal result file
                            saveResultsToFile(sw.ToString(),
                                              resultsDir + "/results/" + testSetName + "/" + testName + ".out");
                        }
                        transformer.MessageListener = new TestOutcome.MessageListener(outcome);

                        // run without serialization
                        if (env.streamedPath != null)
                        {
                            transformer.SetInputStream(new FileStream(env.streamedPath, FileMode.Open, FileAccess.Read), testCase.BaseUri);
                        }
                        XdmDestination destination = new XdmDestination();
                        transformer.Implementation.setOutputURIResolver(
                            new OutputResolver(env.processor, outcome, false));
                        transformer.Run(destination);

                        //transformer. .transform();
                        outcome.SetPrincipalResult(destination.XdmNode);
                        //}
                    } catch (Exception err) {
                        outcome.SetException(err);
                        //outcome.SetErrorsReported(collector.getErrorCodes());
                        // err.printStackTrace();
                        // failures++;
                        //resultsDoc.writeTestcaseElement(testName, "fail", "*** crashed " + err.Message);
                        //return;
                    }
                }
                XdmNode assertion = (XdmNode)xpath.EvaluateSingle("result/*", testCase);
                if (assertion == null)
                {
                    failures++;
                    resultsDoc.writeTestcaseElement(testName, "fail", "No test assertions found");
                    return;
                }
                XPathCompiler assertionXPath = env.processor.NewXPathCompiler();
                //assertionXPath.setLanguageVersion("3.0");
                bool success = outcome.TestAssertion(assertion, outcome.GetPrincipalResultDoc(), assertionXPath, xpath, debug);
                if (success)
                {
                    if (outcome.GetWrongErrorMessage() != null)
                    {
                        outcome.SetComment(outcome.GetWrongErrorMessage());
                        wrongErrorResults++;
                    }
                    else
                    {
                        successes++;
                    }
                    resultsDoc.writeTestcaseElement(testName, "pass", outcome.GetComment());
                }
                else
                {
                    failures++;
                    resultsDoc.writeTestcaseElement(testName, "fail", outcome.GetComment());
                }
            }
        }
示例#22
0
        public void UploadDoc()
        {
            HttpPostedFileBase file          = Request.Files["Filedata"];
            string             fileName      = Path.GetFileName(file.FileName);
            string             fileExt       = Path.GetExtension(fileName);
            string             docxStorePath = HttpContext.Server.MapPath("/Journal/" + fileName);

            if (fileExt == ".docx" || fileExt == ".xml")
            {
                file.SaveAs(docxStorePath);
            }


            //将word中的图片做一下卫生
            PictureOperator     po    = new PictureOperator();
            DocxOperator        docxO = new DocxOperator();
            List <PictureModel> list  = po.OperateDrawing(docxStorePath, "10.1186/s12879-015-1235-y");

            docxO.ReplaceDrawings(docxStorePath, list);



            //获得xslt文件路径
            string xsltPath = Server.MapPath("~/Xslt/TranslateFromDocxStep9b.xslt");

            DocxDocumentTrans ddt = new DocxDocumentTrans(xsltPath, docxStorePath);

            string xmlPath = ddt.CreateXmlAndReturnPath();
            //string xmlPath = @"E:\workspace\20160906\XmlJournal\XJ.Web\Journals\2.xml";


            //根据文档路径获得文档中 标题样式 的样式Id(在docx中,标题的样式叫做title 他的样式Id却经常为a3,a4,类似等等)
            string titleStyleId = new DocxOperator().GetTitleStyleId(docxStorePath);
            ArticleAffiliationAuthorInfo aaaInfo = GetArticleAffiliations(5);

            Processor processor = new Processor();

            // Load the source document.
            //XdmNode input = processor.NewDocumentBuilder().Build(new Uri(docxStorePath));
            XdmNode input = processor.NewDocumentBuilder().Build(new Uri(xmlPath));

            // Create a transformer for the stylesheet.
            XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltPath)).Load();

            // Set the root node of the source document to be the initial context node.
            transformer.InitialContextNode = input;

            transformer.SetParameter(new QName("", "", "titleStyleId"), new XdmAtomicValue(titleStyleId));
            transformer.SetParameter(new QName("", "", "authorInfo"), new XdmAtomicValue(aaaInfo.AuthorInfo));
            transformer.SetParameter(new QName("", "", "affiliationInfo"), new XdmAtomicValue(aaaInfo.AffiliationInfo));
            transformer.SetParameter(new QName("", "", "publishedYear"), new XdmAtomicValue(aaaInfo.publishedYear));

            // BaseOutputUri is only necessary for xsl:result-document.
            transformer.BaseOutputUri = new Uri(xsltPath);



            // Create a serializer.
            Serializer serializer = new Serializer();

            //TextWriter tw = new StreamWriter();
            //serializer.SetOutputWriter(Response.Output);
            //serializer.SetOutputFile(Server.MapPath(@"D:\test.html"));
            serializer.SetOutputFile(@"D:\MyAnswer.txt");



            // Transform the source XML to System.out.
            transformer.Run(serializer);

            string             str = System.IO.File.ReadAllText(@"D:\MyAnswer.txt");
            SCIJournalEntities db  = new SCIJournalEntities();
            var model = db.Articles.Where(m => m.Id == 5).FirstOrDefault();

            model.Html = str;

            db.SaveChanges();
        }