///<summary> ///Performs a Saxon transformation. /// </summary> /// public override Stream Transform(Stream source, Stream xsl) { MemoryStream result = new MemoryStream(); Uri uri = new Uri("file://C:/"); //set XSLT stylesheet Processor p = new Processor(); XsltCompiler c = p.NewXsltCompiler(); c.BaseUri = uri; XsltExecutable e = c.Compile(xsl); XsltTransformer t = e.Load(); //set output var destination = new Serializer(); destination.SetOutputStream(result); t.SetInputStream(source, uri); t.Run(destination); result.Position = 0; result.Flush(); return(result); }
public override bool TransformXml(string SourceXmlPath, string OutputPath) { var input = new FileInfo(SourceXmlPath); var output = new FileInfo(OutputPath); DomDestination destination = new DomDestination(); try { // Do transformation to a destination using (var inputStream = input.OpenRead()) { CompiledXform.SetInputStream(inputStream, new Uri(input.DirectoryName)); CompiledXform.Run(destination); } } catch (Exception Ex) { Console.WriteLine(Ex.ToString() + "\n" + Ex.StackTrace); return(false); } // Save result to file destination.XmlDocument.Save(output.FullName); return(true); }
public static string TransformSAXON(string documentPath, string xsltPath, bool schemaAware) { Processor processor = new Processor(); XsltCompiler xsltCompiler = processor.NewXsltCompiler(); xsltCompiler.Processor.SetProperty(FeatureKeys.GENERATE_BYTE_CODE, "false"); XsltExecutable xsltExecutable = xsltCompiler.Compile(new Uri("file://" + xsltPath)); XsltTransformer xsltTransformer = xsltExecutable.Load(); if (schemaAware //!string.IsNullOrEmpty(xsdPath) ) { xsltTransformer.SchemaValidationMode = SchemaValidationMode.Strict; } using (FileStream fileStream = File.OpenRead(documentPath)) { xsltTransformer.SetInputStream(fileStream, new Uri(@"file://" + documentPath)); XdmDestination destination = new XdmDestination(); xsltTransformer.Run(destination); StringBuilder outputBuilder = new StringBuilder(); outputBuilder.Append(destination.XdmNode.OuterXml); return(outputBuilder.ToString()); } }
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()); } }
private string ProcessXslt(string result, string xslt) { XElement xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(result)); string cleanXmlDocument = xmlDocumentWithoutNs.ToString(); XsltExecutable xsltExecutable = GetXsltExecutable(xslt); byte[] xmlByteArray = System.Text.Encoding.UTF8.GetBytes(cleanXmlDocument); var inputStream = new MemoryStream(xmlByteArray); XsltTransformer transformer = xsltExecutable.Load(); // Saxon requires to set an Uri for the stream; otherwise setting the input stream fails transformer.SetInputStream(inputStream, new Uri("http://localhost")); // run the transformation and save the result to string Serializer serializer = new Processor().NewSerializer(); using (var memoryStream = new MemoryStream()) { serializer.SetOutputStream(memoryStream); transformer.Run(serializer); memoryStream.Position = 0; using (var streamReader = new StreamReader(memoryStream)) { result = streamReader.ReadToEnd(); } } return(result.Contains(NoMatchString) ? null : result); }
public XmlDocument Validation(string xmlfile) { XmlDocument doc = null; DomDestination dom = new DomDestination(); Stream src = null; try { if (_schematron == null) { throw new Exception("incompleted schema stylesheet"); } FileInfo file = new FileInfo(xmlfile); Uri baseuri = new Uri(file.DirectoryName + "/"); src = file.OpenRead(); _schematron.SetInputStream(src, baseuri); _schematron.Run(dom); doc = dom.XmlDocument; } catch (Exception ex) { throw ex; } finally { dom.Close(); src?.Close(); src?.Dispose(); } return(doc); }
private Stream Transform(XsltTransformer xslt, Stream src, Uri baseuri) { MemoryStream dst = null; DomDestination dom = new DomDestination(); try { xslt.SetInputStream(src, baseuri); xslt.Run(dom); dst = new MemoryStream(); dom.XmlDocument.Save(dst); dst.Flush(); dst.Position = 0; } catch (Exception ex) { throw ex; } finally { dom.Close(); } return(dst); }
public void Transform(Stream inStream, Stream outStream) { //_logger.LogTrace($"Running transformation"); var dest = new Serializer(); dest.SetOutputStream(outStream); _transformer.SetInputStream(inStream, new Uri("http://no.where.to.go/")); _transformer.Run(dest); }
public override void FileToFileTransform(Uri sourceUri, string resultFileLocation) { XsltTransformer transformer = stylesheet.Load(); if (sourceUri != null) { transformer.SetInputStream(File.Open(sourceUri.AbsolutePath, FileMode.Open), sourceUri); } else { transformer.InitialTemplate = new QName("main"); } Serializer serializer = processor.NewSerializer(); serializer.SetOutputFile(resultFileLocation); transformer.Run(serializer); resultFile = resultFileLocation; }
public override void FileToFileTransform(Uri sourceUri, string resultFileLocation) { XsltTransformer transformer = stylesheet.Load(); processor.SetProperty(net.sf.saxon.lib.FeatureKeys.SCHEMA_VALIDATION_MODE, schemaAware ? "strict" : "strip"); //transformer.SchemaValidationMode = SchemaValidationMode.Strict; // not working in 9.5.1.5: see bug 2062 if (sourceUri != null) { transformer.SetInputStream(File.Open(sourceUri.AbsolutePath, FileMode.Open), sourceUri); } else { transformer.InitialTemplate = new QName("main"); } Serializer serializer = processor.NewSerializer(); serializer.SetOutputFile(resultFileLocation); transformer.Run(serializer); resultFile = resultFileLocation; //serializer.Close(); }
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()); } } }
private static string TransformSAXON(string document, string xslt, string tmpDir, PSMSchema psmSchema = null, bool schemaAware = false) { Processor processor = new Processor(); XsltCompiler xsltCompiler = processor.NewXsltCompiler(); //xsltCompiler.SchemaAware = true; xsltCompiler.Processor.SetProperty(FeatureKeys.GENERATE_BYTE_CODE, "false"); if (!Directory.Exists(tmpDir)) { tmpDir = Path.GetTempPath(); } using (StringReader sr = new StringReader(xslt)) { XsltExecutable xsltExecutable = xsltCompiler.Compile(sr); string text; if (!schemaAware) { int si = document.IndexOf("xmlns:xsi=\""); int ei = document.IndexOf("\"", si + "xmlns:xsi=\"".Length) + 1; text = si != -1 ? document.Remove(si, ei - si) : document; si = text.IndexOf("xmlns=\""); ei = text.IndexOf("\"", si + "xmlns=\"".Length) + 1; string xmlns = si != -1 ? text.Substring(si, ei - si) : string.Empty; text = si != -1 ? text.Remove(si, ei - si) : text; } else { text = document; } string tmpDoc = tmpDir + "tmp.xml"; if (schemaAware) { XsdSchemaGenerator xsdGen = new XsdSchemaGenerator(); xsdGen.Initialize(psmSchema); xsdGen.GenerateXSDStructure(); XDocument schema = xsdGen.GetXsd(); string schemaLoc = tmpDir + "LastSchema.xsd"; schema.Save(schemaLoc); } File.WriteAllText(tmpDoc, text.Replace("utf-16", "utf-8"), Encoding.UTF8); StringBuilder outputBuilder = new StringBuilder(); //XmlWriterSettings outputWriterSettings = new XmlWriterSettings { Indent = true, CheckCharacters = false, NewLineOnAttributes = true }; //XmlWriter outputWriter = XmlWriter.Create(outputBuilder, outputWriterSettings); //Debug.Assert(outputWriter != null); XsltArgumentList xsltArgumentList = new XsltArgumentList(); FileStream fs = null; try { XsltTransformer xsltTransformer = xsltExecutable.Load(); if (schemaAware) { xsltTransformer.SchemaValidationMode = SchemaValidationMode.Strict; } fs = new FileStream(tmpDoc, FileMode.Open); xsltTransformer.SetInputStream(fs, new Uri(@"file://" + tmpDoc)); XdmDestination destination = new XdmDestination(); xsltTransformer.Run(destination); outputBuilder.Append(destination.XdmNode.OuterXml); //outputWriter.Flush(); int pos1 = outputBuilder.ToString().IndexOf(">"); int pos2 = outputBuilder.ToString().IndexOf("/>"); int pos; if (pos1 == -1) { pos = pos2; } else if (pos2 == -1) { pos = pos1; } else { pos = Math.Min(pos1, pos2); } //outputBuilder.Insert(pos, // Environment.NewLine + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + xmlns); StringReader outputReader = new StringReader(outputBuilder.ToString()); XDocument d = XDocument.Load(outputReader); outputReader.Close(); return(d.PrettyPrintXML()); } finally { if (fs != null) { fs.Close(); } } } }
private static string TransformSAXON(string document, string xslt, string tmpDir) { try { Processor processor = new Processor(); XsltCompiler xsltCompiler = processor.NewXsltCompiler(); if (!Directory.Exists(tmpDir)) { tmpDir = Path.GetTempPath(); } string tmpXsltFile = tmpDir + "tmp.xslt"; File.WriteAllText(tmpXsltFile, xslt, Encoding.UTF8); XsltExecutable xsltExecutable = xsltCompiler.Compile(new Uri(@"file://" + tmpXsltFile)); int si = document.IndexOf("xmlns:xsi=\""); int ei = document.IndexOf("\"", si + "xmlns:xsi=\"".Length) + 1; string text = document.Remove(si, ei - si); si = text.IndexOf("xmlns=\""); ei = text.IndexOf("\"", si + "xmlns=\"".Length) + 1; string xmlns = text.Substring(si, ei - si); text = text.Remove(si, ei - si); string tmpDoc = tmpDir + "tmp.xml"; File.WriteAllText(tmpDoc, text.Replace("utf-16", "utf-8"), Encoding.UTF8); //StringBuilder outputBuilder = new StringBuilder(); //XmlWriterSettings outputWriterSettings = new XmlWriterSettings { Indent = true, CheckCharacters = false, NewLineOnAttributes = true}; //XmlWriter outputWriter = XmlWriter.Create(outputBuilder, outputWriterSettings); //Debug.Assert(outputWriter != null); //XsltArgumentList xsltArgumentList = new XsltArgumentList(); FileStream fs = null; try { XsltTransformer xsltTransformer = xsltExecutable.Load(); fs = new FileStream(tmpDoc, FileMode.Open); xsltTransformer.SetInputStream(fs, new Uri(@"file://" + tmpDoc)); XdmDestination destination = new XdmDestination(); xsltTransformer.Run(destination); StringBuilder outputBuilder = new StringBuilder(); outputBuilder.Append(destination.XdmNode.OuterXml); //outputWriter.Flush(); int pos1 = outputBuilder.ToString().IndexOf(">"); int pos2 = outputBuilder.ToString().IndexOf("/>"); int pos; if (pos1 == -1) { pos = pos2; } else if (pos2 == -1) { pos = pos1; } else { pos = Math.Min(pos1, pos2); } outputBuilder.Insert(pos, Environment.NewLine + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + xmlns); XmlDocument d = new XmlDocument(); StringReader outputReader = new StringReader(outputBuilder.ToString()); d.Load(outputReader); outputReader.Close(); return(d.PrettyPrintXML()); } finally { if (fs != null) { fs.Close(); } } } catch (Exception e) { System.Windows.MessageBox.Show(e.Message); return(string.Empty); } }
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()); } }
static void Main(string[] args) { var processor = new Processor(); var compiler = processor.NewXsltCompiler(); _tmxXslt = compiler.Compile(Assembly.GetExecutingAssembly().GetManifestResourceStream("XliffTmxMd.xlf-tmx.xsl")).Load(); _mdXslt = compiler.Compile(Assembly.GetExecutingAssembly().GetManifestResourceStream( "XliffTmxMd.xlf-md.xsl")).Load(); var xpathCompiler = processor.NewXPathCompiler(); _getOutputName = xpathCompiler.Compile(@"//*[local-name()='file'][1]/@original").Load(); bool showHelp = false; bool makeBackup = false; var transforms = new List <string>(); var output = new List <string>(); var myArgs = new List <string>(); string persist = string.Empty; if (args.Length == 1 && args[0][0] != '-') { // If just the file name is given on the command line and the arguments for processing this // file type were persisted in the registry previously, then update command line arguments try { var ext = Path.GetExtension(args[0]); string cmdLine = RegistryAccess.GetRegistryValue(ext, "") as string; cmdLine += args[0]; args = cmdLine.Split(' '); } catch // If there is no command line in the registry, just go with what we have. { // ignored } } // see: http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in-c var p = new OptionSet { { "t|transform=", "the {TRANSFORM} to apply to the item.\n" + "Defaults to the internal transform.", v => transforms.Add(v) }, { "o|output=", "the output file for saving the result.\n" + "Defaults to replacing the file in the source package.", v => output.Add(v) }, { "d|define=", "define argument:value for transformation.", v => myArgs.Add(v) }, { "p|persist=", "Persist this command so XliffTmxMd will process it on any file with this extension.", v => persist = v }, { "r|reset=", "Remove persistted command.", v => { RegistryAccess.DeleteRegistryValue(v); Environment.Exit(0); } }, { "v", "increase debug message verbosity", v => { if (v != null) { ++_verbosity; } } }, { "b|backup", "controls making backup files", v => makeBackup = v != null }, { "h|help", "show this message and exit", v => showHelp = v != null }, }; List <string> extra = null; try { extra = p.Parse(args); if (showHelp || extra.Count > 9) { ShowHelp(p); Environment.Exit(0); } if (!string.IsNullOrEmpty(persist)) { var cmdLine = new StringBuilder(); for (int i = 0; i < args.Length - 1; i++) { cmdLine.Append(args[i]); cmdLine.Append(' '); } RegistryAccess.SetStringRegistryValue(persist, cmdLine.ToString()); Environment.Exit(0); } if (extra.Count == 0) { Console.WriteLine("Enter full file name to process"); extra.Add(Console.ReadLine()); } } catch (OptionException e) { Console.Write("XliffTmxMd: "); Console.WriteLine(e.Message); Console.WriteLine("Try `XliffTmxMd --help' for more information."); Environment.Exit(-1); } foreach (var transform in transforms) { Transformers.Add(compiler.Compile(File.Open(transform, FileMode.Open)).Load()); } var builder = processor.NewDocumentBuilder(); var nextOutput = 0; string firstOutput = Path.Combine(Path.GetTempPath(), Path.GetTempFileName()); foreach (string fileName in extra) { Debug("Processing: {0}", fileName); var fullName = Path.GetFullPath(fileName); var folder = Path.GetDirectoryName(fullName); var fileUri = new Uri(fullName); System.Diagnostics.Debug.Assert(folder != null, "folder != null"); var folderUri = new Uri(folder); if (makeBackup) { MakeBackupFile(fileName); } string outName; if (output.Count != 0) { nextOutput = nextOutput + 1 < output.Count ? nextOutput + 1 : nextOutput; firstOutput = outName = output[nextOutput]; } else { _getOutputName.ContextItem = builder.Build(XmlReader.Create(fileName)); var outNameNode = _getOutputName.EvaluateSingle() as XdmNode; System.Diagnostics.Debug.Assert(outNameNode != null, "outNameNode != null"); outName = outNameNode.StringValue; AddBaseParam(outName, myArgs, folderUri); } System.Diagnostics.Debug.Assert(outName != null, "outName != null"); Debug("Writing to: {0}", outName); if (Transformers.Count > 0) { Transformers[0].SetInputStream(File.Open(fileName, FileMode.Open), fileUri); AddArgumentList(myArgs, Transformers[0]); var writer = XmlWriter.Create(firstOutput); Transformers[0].Run(new TextWriterDestination(writer)); writer.Close(); } else if (Path.GetExtension(outName) == ".tmx") { _tmxXslt.SetInputStream(File.Open(fileName, FileMode.Open), fileUri); AddArgumentList(myArgs, _tmxXslt); var writer = XmlWriter.Create(firstOutput); _tmxXslt.Run(new TextWriterDestination(writer)); writer.Close(); } else { _mdXslt.SetInputStream(File.Open(fileName, FileMode.Open), fileUri); AddArgumentList(myArgs, _mdXslt); var writer = XmlWriter.Create(firstOutput); _mdXslt.Run(new TextWriterDestination(writer)); writer.Close(); } } if (output.Count == 0) { File.Delete(firstOutput); } }