Menu ▾ ▴

document-uri gone when using Saxon.API .NET?

Help
eholley
2006-06-08
2012-10-08
  • eholley

    eholley - 2006-06-08

    When using the .NET command line tool, transform.exe, document-uri is available in the XSL. However, when using the Saxon.API to transform files, the document-uri is blank. Here's my code:

        public static string Transform(string xml, string xsl, Uri xmlBaseUri, Uri xslBaseUri, NameValueCollection transParams)
        {
            // Load the source document
            DocumentBuilder builder = processor.NewDocumentBuilder();
            builder.BaseUri = xmlBaseUri;
            Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
            XdmNode input = builder.Build(xmlStream);
            xmlStream.Close();
    
            // Compile the stylesheet
            XsltCompiler compiler = processor.NewXsltCompiler();
            compiler.BaseUri = xslBaseUri;
            Stream xslStream = new MemoryStream(Encoding.UTF8.GetBytes(xsl));
            XsltExecutable exec = compiler.Compile(xslStream);
            xslStream.Close();
    
            // Create transformer with parameters
            XsltTransformer transformer = exec.Load();
            foreach(string key in transParams.AllKeys) {
                transformer.SetParameter(new QName("", "", key), new XdmAtomicValue(transParams[key]));
            }
    
            // Run
            transformer.InitialContextNode = input;
            XdmDestination results = new XdmDestination();
            transformer.Run(results);
    
            return results.XdmNode.StringValue;
        }
    
        public static string Transform(Uri xml, Uri xsl, NameValueCollection transParams)
        {
            // Load the source document
            DocumentBuilder builder = processor.NewDocumentBuilder();
            XdmNode input = builder.Build(xml);
    
            // Compile the stylesheet
            XsltCompiler compiler = processor.NewXsltCompiler();
            XsltExecutable exec = compiler.Compile(xsl);
    
            // Create transformer with parameters
            XsltTransformer transformer = exec.Load();
            foreach(string key in transParams.AllKeys) {
                transformer.SetParameter(new QName("", "", key), new XdmAtomicValue(transParams[key]));
            }
    
            // Run
            transformer.InitialContextNode = input;
            XdmDestination results = new XdmDestination();
            transformer.Run(results);
    
            return results.XdmNode.StringValue;
        }