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); } }
/** * 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); }
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."); } }
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); } }
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)); } } }
//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); }
/** * 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); }
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()); } }
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; } }
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(); } }
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); } } } }
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(); }
/** * 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); }
/// <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); } }
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); } }
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()); } }
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); } }
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()); } } }
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(); }