상속: XmlResolver
        public string GetHtml(string transform_path, string xml)
        {
            string xsltPath = Server.MapPath(transform_path) + "\\sdctemplate.xslt";
            string csspath  = Server.MapPath(transform_path) + "\\sdctemplate.css";

            //3/10/2016 - change encoding to unicode
            System.IO.MemoryStream              stream    = new System.IO.MemoryStream(System.Text.UnicodeEncoding.ASCII.GetBytes(xml));
            System.Xml.XPath.XPathDocument      document  = new System.Xml.XPath.XPathDocument(stream);
            System.IO.StringWriter              writer    = new System.IO.StringWriter();
            System.Xml.Xsl.XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();

            System.Xml.Xsl.XsltSettings settings = new System.Xml.Xsl.XsltSettings(true, true);

            System.Xml.XmlSecureResolver resolver = new System.Xml.XmlSecureResolver(new System.Xml.XmlUrlResolver(), csspath);
            try
            {
                transform.Load(xsltPath, settings, resolver);
                transform.Transform(document, null, writer);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(writer.ToString());
        }
예제 #2
0
    static public string Transform (string xmldata, string xsluri)
    {
        // FIXME: PONER TRY/CATCH PARA EVITAR MOSTRAR EXPLOSIONES DEL TRANSFORM
        //
        // CARGA LA HOJA DE ESTILOS
        System.Xml.Xsl.XslTransform xslt = new System.Xml.Xsl.XslTransform ();
        try
        {
            xslt.Load (System.AppDomain.CurrentDomain.BaseDirectory + "/Public/xml/" + xsluri);
        }
        catch (System.IO.FileNotFoundException)
        {
            System.Console.WriteLine ("No se ha encontrado el fichero {0}", xsluri);
            return "Template no encontrado";
        }

        // LEER ENTRADA
        System.Xml.XmlReader xrd;
        try
        {
            xrd = new XmlTextReader (new System.IO.StringReader (xmldata));
        }
        catch (System.ArgumentNullException)
        {
            return "[Contenido vacio (1)]";
        }

        // EJECUTAMOS Y PASAMOS A STRING
        XPathDocument xpd;
        try
        {
            xpd = new XPathDocument (xrd);
        }
        catch (System.Xml.XmlException ex)
        {
            return "[xml fuente incorrecto, error: " + ex.Message + "]";
        }
        XmlResolver xrs = new XmlSecureResolver (new XmlUrlResolver (), new PermissionSet (PermissionState.Unrestricted));
        XmlReader xr = xslt.Transform (xpd, null, xrs);
        xrd.Close ();

        // Output results to string
        XmlDocument xd = new XmlDocument ();
        xd.Load (xr);
        System.IO.StringWriter sw = new System.IO.StringWriter ();
        try
        {
            xd.Save (sw);
        }
        catch (System.InvalidOperationException ex)
        {
            return "[resultado incorrecto: "+ ex.Message +"]";
        }
        return sw.ToString ();
    }
예제 #3
0
        protected void Page_Load(object sender, EventArgs e)

        {

        List<string> myList = new List<string>();
        myList.Add("Usr");
        myList.Add("Item");
        myList.Add("Topic");
        myList.Add("Workspace");
        myList.Add("Path");
        myList.Add("Social");

        XmlTextWriter xW = new XmlTextWriter(File.Open(Server.MapPath("api-doc.docx"), FileMode.Create), Encoding.UTF8);

        XslCompiledTransform  docXSL = new XslCompiledTransform();

        XsltSettings myXSS = new XsltSettings();
        myXSS.EnableDocumentFunction = true;

        XmlSecureResolver resolver = new XmlSecureResolver(new XmlUrlResolver(), "http://localhost:64362/Documentation");
        resolver.Credentials = CredentialCache.DefaultCredentials;

        docXSL.Load(Server.MapPath("wsdl-to-doc.xsl"), myXSS, null);
        try
        {
            foreach (string wsName in myList)
            {
                docXSL.Transform("http://localhost:54004/" + wsName + ".asmx?WSDL", xW);
            }

        }
        catch (Exception ex)
        {

            Response.Write(ex.Message+" "+ex.Source+" "+ex.StackTrace+" "+ex.InnerException.Message);
        }

        xW.Flush();
        xW.Close();

        //Read and output the file to screen
        using (StreamReader sr = File.OpenText(Server.MapPath("api-doc.docx"))) {
            string myHtml = sr.ReadToEnd();
            divDoc.Text = myHtml;
        }

        }
예제 #4
0
        static void Main(string[] args)
        {
            // used to build entire input
            StringBuilder sb = new StringBuilder();

            // used on each read operation
            byte[] buf = new byte[8192];

            // prepare the web page we will be asking for
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://gathering.tweakers.net/forum/list_messages/1262310");

            // execute the request
            try
            {
                //throw new Exception("bogus");

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // we will read data via the response stream
                Stream resStream = response.GetResponseStream();

                string tempString = null;
                int count = 0;

                do
                {
                    // fill the buffer with data
                    count = resStream.Read(buf, 0, buf.Length);

                    // make sure we read some data
                    if (count != 0)
                    {
                        // translate from bytes to ASCII text
                        tempString = Encoding.ASCII.GetString(buf, 0, count);

                        // continue building the string
                        sb.Append(tempString);
                    }
                }
                while (count > 0); // any more data to read?
            }
            catch (WebException ex)
            {
                sb.AppendFormat("<html><body><h1>Error</h1><p>status {0} - {1}</html>",
                    ex.Status,
                    ex.Message);
            }
            catch (Exception ex)
            {
                sb.AppendFormat("<html><body><h1>Error</h1><p>generic error: {0}</html>",
                    ex.Message);
            }


            // now run the collected HTML through HTMLtidy to clean it and reformat as XHTML 
            // so we can access it using an XMLreader, for instance.
            TidyParser tidier = new TidyParser();

            bool cfg_ok = tidier.TidyOptSetBool(HtmlTidy.HtmlTidyOptionId.ShowWarnings, true);
            cfg_ok &= tidier.TidyOptSetBool(HtmlTidy.HtmlTidyOptionId.XhtmlOut, true);
            cfg_ok &= tidier.TidyOptSetBool(HtmlTidy.HtmlTidyOptionId.XmlDecl, true);
            cfg_ok &= tidier.TidyOptSetAutoBool(HtmlTidy.HtmlTidyOptionId.IndentContent, HtmlTidyTriState.AutoState);

            cfg_ok &= tidier.TidyOptAdjustConfig();

            if (tidier.TidyConfigErrorCount() > 0)
            {
                Console.WriteLine("HTMLTIDY configuration error: {0}", tidier.ErrorMessage());

                tidier.TidyErrorSummary();

                Console.WriteLine("HTMLTIDY error summary: {0}", tidier.ErrorMessage());

                tidier.ResetErrorMessage();
            }

#if false
            String res = tidier.DoParseHtml2String(sb.ToString());

            Console.WriteLine("HTMLTIDY output\n{0}", res);
#endif

            XmlDocument xhtml_doc = tidier.DoParseHtml(sb.ToString());

            if (tidier.TidyErrorCount() > 0 || tidier.TidyWarningCount() > 0)
            {
                Console.WriteLine("HTMLTIDY HTML parsing errors: {0}", tidier.ErrorMessage());

                tidier.TidyErrorSummary();

                Console.WriteLine("HTMLTIDY HTML parsing error+warning summary: {0}", tidier.ErrorMessage());

                tidier.ResetErrorMessage();
            }

            Console.WriteLine("\nHTMLTIDY HTML parsing output:\n-----------------------------------\n");

            // print out reformatted XML/XHTML
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.OmitXmlDeclaration = false;
            settings.Indent = true;
            settings.IndentChars = "  ";
            XmlWriter writer = XmlWriter.Create(Console.Out, settings); // deprecated: new XmlTextWriter(Console.Out);
            // writer.Formatting = Formatting.Indented; -- deprecated XmlTextWriter usage
            try
            {
                xhtml_doc.WriteTo(writer);
                writer.Flush();
            }
            catch (Exception ex)
            {
                writer.Flush();
                Console.WriteLine("XML output error: {0}\n", ex.Message);
                Console.WriteLine("XML output error source + stacktrace: {0}\n{1}\n", ex.Source, ex.StackTrace);
            }
            Console.WriteLine();

            // now try a search operation on the XmlDocument.
            XPathNavigator navigator = xhtml_doc.CreateNavigator();

            XPathExpression query = navigator.Compile("count(//html//br)");
            double total = (double)navigator.Evaluate(query);
            Console.WriteLine("Number of <br> elements = {0}\n", total);
            total = (double)navigator.Evaluate("count(//p)");
            Console.WriteLine("Number of <p> elements = {0}\n", total);
            
            // perform a bit of XSLT transformation on the XHTML:
#if false
            // Create the credentials.
            //WebPermission myWebPermission = new WebPermission(PermissionState.None);
            PermissionSet myPermissions = new PermissionSet(PermissionState.None); 
            //myPermissions.AddPermission(myWebPermission);

            XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
            XmlReaderSettings mySettings = new XmlReaderSettings();
            mySettings.XmlResolver = myResolver;

            // Compile the style sheet.
            String xslt_str = "";
            TextReader xsl_txt_rdr = new StringReader(xslt_str);
            XmlTextReader xsl_reader = XmlReader.Create(xsl_txt_rdr, mySettings) as XmlTextReader;
            XslCompiledTransform xslt = new XslCompiledTransform(true);
            xslt.Load(xsl_reader, XsltSettings.Default, myResolver);	
#endif

        }
		public void EmptyEvidenceDeniedAccess ()
		{
			XmlResolver r = new XmlSecureResolver (new XmlUrlResolver (), (Evidence) null);
			r.GetEntity (r.ResolveUri (null, "http://www.go-mono.com"), null, typeof (Stream));
		}
		public void EmptyEvidenceWontMatter ()
		{
			XmlSecureResolver r = new XmlSecureResolver (new XmlUrlResolver (), (Evidence)null);
			Uri uri = r.ResolveUri (null, "http://www.go-mono.com");
			Assert.IsNotNull (uri);
		}
		public void EmptyCtorCannotResolve ()
		{
			XmlSecureResolver r = new XmlSecureResolver (null, (Evidence)null);
			r.ResolveUri (null, "http://www.go-mono.com");
		}
예제 #8
0
		public void TestAsync ()
		{
			var loc = Assembly.GetExecutingAssembly ().Location;
			Evidence e = XmlSecureResolver.CreateEvidenceForUrl (loc);
			var ur = new XmlUrlResolver ();
			var sr = new XmlSecureResolver (ur, e);
			Uri resolved = sr.ResolveUri (null, loc);
			Assert.AreEqual ("file", resolved.Scheme);
			var task = sr.GetEntityAsync (resolved, null, typeof (Stream));
			Assert.That (task.Wait (3000));
			Assert.IsTrue (task.Result is FileStream, "Unexpected type: " + task.Result.GetType());
		}