Beispiel #1
0
        static MailMessage GetMailMessage(XPathNavigator message, XPathItemFactory itemFactory)
        {
            var xpathMessage = new XPathMailMessage();
             xpathMessage.ReadXml(message);

             return xpathMessage.ToMailMessage(itemFactory);
        }
Beispiel #2
0
        public long PrepareContent(XPathItemFactory itemFactory, XmlResolver resolver)
        {
            XPathItem item = this.Content;

             if (item != null) {

            XmlQualifiedName method = _Method ?? GetMethodFromMediaType(this.MediaType, this.Method);

            this.contentStream = new MemoryStream();
            Serialize(this.contentStream, itemFactory, method);
            this.contentStream.Position = 0;

             } else if (this.Src != null) {

            if (resolver == null) {
               throw new ArgumentNullException("resolver");
            }

            Stream source = resolver.GetEntity(this.Src, null, typeof(Stream)) as Stream;

            if (source != null) {

               if (source.CanSeek) {
                  this.contentStream = source;
               } else {
                  this.contentStream = new MemoryStream();

                  source.CopyTo(this.contentStream);
                  this.contentStream.Position = 0;

                  source.Dispose();
               }

            } else {
               throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Could not resolve {0}.", this.Src.AbsoluteUri));
            }
             }

             return (this.contentStream != null) ?
            this.contentStream.Length
            : 0;
        }
Beispiel #3
0
        public void Serialize(Stream output, XPathItemFactory itemFactory, XmlQualifiedName method)
        {
            if (this.Content == null) throw new InvalidOperationException("Content cannot be null.");

             XPathItem item = this.Content;

             if (method == ExtensionMethods.Base64Binary) {

            byte[] buffer = (!item.IsNode && item.XmlType.TypeCode == XmlTypeCode.Base64Binary) ?
               (byte[])item.TypedValue
               : Convert.FromBase64String(item.Value);

            output.Write(buffer, 0, buffer.Length);

             } else if (method == ExtensionMethods.HexBinary) {

            byte[] buffer = (!item.IsNode && item.XmlType.TypeCode == XmlTypeCode.HexBinary) ?
               (byte[])item.TypedValue :
               fromBinHexString(item.Value);

            output.Write(buffer, 0, buffer.Length);

             } else {

            var serialization = new XPathSerializationOptions {
               Indent = this.Indent,
               OmitXmlDeclaration = this.OmitXmlDeclaration,
               MediaType = this.MediaType,
               Method = method,
               DocTypePublic = this.DocTypePublic,
               DocTypeSystem = this.DocTypeSystem,
               Encoding = this.Encoding,
               ByteOrderMark = this.ByteOrderMark
            };

            itemFactory.Serialize(item, output, serialization);
             }
        }
Beispiel #4
0
        public void Deserialize(Stream source, Uri sourceUri, XPathItemFactory itemFactory, XmlQualifiedName method)
        {
            if (source == null) throw new ArgumentNullException("source");
             if (itemFactory == null) throw new ArgumentNullException("itemFactory");

             XPathItem content;

             TextReader textReader = (this.Encoding != null) ?
            new StreamReader(source, this.Encoding)
            : new StreamReader(source);

             if (method == XPathSerializationMethods.Xml || method == XPathSerializationMethods.XHtml) {

            content = itemFactory.CreateNodeReadOnly(textReader, new XmlParsingOptions { BaseUri = sourceUri }).CreateNavigator();

             } else if (method == XPathSerializationMethods.Html) {

            var htmlParser = XPathHttpClient.HtmlParser;

            if (htmlParser != null) {
               content = htmlParser(textReader).CreateNavigator();
            } else {
               content = itemFactory.CreateAtomicValue(textReader.ReadToEnd(), XmlTypeCode.String);
            }

             } else if (method == XPathSerializationMethods.Text) {
            content = itemFactory.CreateAtomicValue(textReader.ReadToEnd(), XmlTypeCode.String);

             } else {

            byte[] buffer;

            using (var memStream = new MemoryStream()) {

               source.CopyTo(memStream);

               buffer = memStream.ToArray();
            }

            byte[] base64 = Encoding.UTF8.GetBytes(Convert.ToBase64String(buffer));

            content = itemFactory.CreateAtomicValue(base64, XmlTypeCode.Base64Binary);
             }

             this.Content = content;
        }
Beispiel #5
0
        public void Deserialize(Stream source, Uri sourceUri, XPathItemFactory itemFactory, string overrideMediaType)
        {
            string mediaType = !String.IsNullOrEmpty(overrideMediaType) ?
            overrideMediaType
            : this.MediaType;

             XmlQualifiedName method = GetMethodFromMediaType(mediaType, ExtensionMethods.Base64Binary);

             Deserialize(source, sourceUri, itemFactory, method);
        }
Beispiel #6
0
        static bool[] FunctionsAvailable(QName[] names, Processor processor, XPathItemFactory itemFactory)
        {
            const string xsltNs = "http://www.w3.org/1999/XSL/Transform";

             IXPathNavigable stylesheetDoc = itemFactory.BuildNode();
             XmlWriter builder = stylesheetDoc.CreateNavigator().AppendChild();

             builder.WriteStartElement("stylesheet", xsltNs);
             builder.WriteAttributeString("version", "2.0");

             for (int i = 0; i < names.Length; i++) {
            QName item = names[i];

            builder.WriteAttributeString("xmlns", "p" + i.ToStringInvariant(), null, item.Uri);
             }

             builder.WriteStartElement("output", xsltNs);
             builder.WriteAttributeString("method", "text");
             builder.WriteEndElement();

             builder.WriteStartElement("template", xsltNs);
             builder.WriteAttributeString("name", "main");

             for (int i = 0; i < names.Length; i++) {

            QName item = names[i];

            if (i > 0) {
               builder.WriteElementString("text", xsltNs, "|");
            }

            builder.WriteStartElement("value-of", xsltNs);
            builder.WriteAttributeString("select", "function-available('{0}:{1}')".FormatInvariant("p" + i.ToStringInvariant(), item.LocalName));
            builder.WriteEndElement();
             }

             builder.WriteEndElement(); // template
             builder.WriteEndElement(); // stylesheet

             builder.Close();

             XsltCompiler compiler = processor.NewXsltCompiler();
             compiler.BaseUri = new Uri("foo:bar");
             compiler.XmlResolver = null;

             XsltTransformer transform = compiler.Compile(stylesheetDoc.CreateNavigator().ReadSubtree()).Load();

             transform.InitialTemplate = new QName("main");

             using (var output = new StringWriter(CultureInfo.InvariantCulture)) {

            var serializer = new Serializer();
            serializer.SetOutputWriter(output);

            transform.Run(serializer);

            return output.ToString().Trim().Split('|').Select(s => XmlConvert.ToBoolean(s)).ToArray();
             }
        }
Beispiel #7
0
        public MailMessage ToMailMessage(XPathItemFactory itemFactory)
        {
            var mailMessage = new MailMessage();

             if (this.From != null) {
            mailMessage.From = this.From.ToMailAddress();
             }

             for (int i = 0; i < this.To.Count; i++) {
            mailMessage.To.Add(this.To[i].ToMailAddress());
             }

             for (int i = 0; i < this.CC.Count; i++) {
            mailMessage.CC.Add(this.CC[i].ToMailAddress());
             }

             for (int i = 0; i < this.Bcc.Count; i++) {
            mailMessage.Bcc.Add(this.Bcc[i].ToMailAddress());
             }

             for (int i = 0; i < this.ReplyTo.Count; i++) {
            mailMessage.ReplyToList.Add(this.ReplyTo[i].ToMailAddress());
             }

             if (this.Sender != null) {
            mailMessage.Sender = this.Sender.ToMailAddress();
             }

             if (this.Subject.HasValue()) {
            mailMessage.Subject = this.Subject.Replace('\r', ' ').Replace('\n', ' ');
             }

             if (this.Body != null) {

            using (var writer = new StringWriter(CultureInfo.CurrentCulture)) {

               this.Body.Serialize(writer, itemFactory);

               mailMessage.Body = writer.ToString();
            }

            mailMessage.IsBodyHtml = this.Body.Method == XPathSerializationMethods.Html
               || this.Body.Method == XPathSerializationMethods.XHtml;
             }

             return mailMessage;
        }
Beispiel #8
0
        public void Serialize(TextWriter output, XPathItemFactory itemFactory)
        {
            if (this.Content == null) {
            return;
             }

             var serialization = new XPathSerializationOptions {
            Method = this.Method,
             };

             itemFactory.Serialize(this.Content, output, serialization);
        }