Ejemplo n.º 1
0
        internal new static AtomContent parse(XPathNavigator navigator) {
            AtomContent result_content = new AtomContent();
            string content = string.Empty;

            XPathNavigator temp_navigator = navigator.Clone();
            XPathNodeIterator it = temp_navigator.SelectDescendants( XPathNodeType.Element, true );

            while ( it.MoveNext() ) {
                string name = it.Current.Name.ToLower();
                int colon_index = name.IndexOf( ":" );

                if ( colon_index != -1 )
                    name = name.Split( new char[] { ':' }, 2 )[1];

                switch ( name ) {
                    case "content":
                        try {
                            XPathNavigatorReader temp_reader = new XPathNavigatorReader( temp_navigator );
                            string base_uri = temp_reader.GetAttribute( "base", XmlNamespaces.Xml );

                            if ( base_uri != null && base_uri.Length > 0 )
                                result_content.XmlBase = new Uri( base_uri );
                        } catch { }
                        try {
                            result_content.XmlLang = AtomUtility.parseLanguage( it.Current.XmlLang );
                        } catch { }
                        result_content.LocalName = name;

                        XPathNavigatorReader reader = new XPathNavigatorReader( it.Current );
                        reader.Read();
                        content = reader.ReadInnerXml();
                        break;
                }
            }

            it = temp_navigator.Select( "@*" );
            do {
                switch ( it.Current.Name.ToLower() ) {
                    case "type":
                        result_content.Type = AtomUtility.parseMediaType( it.Current.Value );
                        break;
                    /*
                     * mode はなさそうだ…。
                     */
                    case "mode":
                        switch ( it.Current.Value.ToLower() ) {
                            case "escaped":
                                result_content.Mode = EncodedMode.Escaped;
                                break;

                            case "base64":
                                result_content.Mode = EncodedMode.Base64;
                                break;
                        }
                        break;
                }
            } while ( it.MoveNext() );

            switch ( result_content.Mode ) {
                case EncodedMode.Escaped:
                    content = AtomUtility.Unescape( content );
                    break;

                case EncodedMode.Base64:
                    content = Encoding.Unicode.GetString( Base64.Decode( content ) );
                    break;
            }
            result_content.Content = content;

            return result_content;
        }
Ejemplo n.º 2
0
        internal new static AtomContent Parse(XPathNavigator navigator)
        {
            AtomContent contentElement = new AtomContent();
            string      content        = String.Empty;

            XPathNavigator nav = navigator.Clone();

            // select the element itself
            XPathNodeIterator iter = nav.SelectDescendants(XPathNodeType.Element, true);

            while (iter.MoveNext())
            {
                string name = iter.Current.Name.ToLower();
                int    idx  = name.IndexOf(":");
                if (idx != -1)
                {
                    name = name.Split(new char[] { ':' }, 2)[1];
                }

                switch (name)
                {
                case "content":
                    try
                    {
                        XPathNavigatorReader navReader = new XPathNavigatorReader(nav);
                        string baseUri = navReader.GetAttribute("base", XmlNamespaces.Xml);
                        if (baseUri != null && baseUri.Length > 0)
                        {
                            contentElement.XmlBase = new Uri(baseUri);
                        }
                    }
                    catch {}

                    try
                    {
                        contentElement.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
                    }
                    catch {}
                    contentElement.LocalName = name;
                    XPathNavigatorReader reader = new XPathNavigatorReader(iter.Current);
                    reader.Read();
                    content = reader.ReadInnerXml();
                    break;
                }
            }

            // select the attributes
            iter = nav.Select("@*");
            do
            {
                switch (iter.Current.Name.ToLower())
                {
                case "type":
                    contentElement.Type = Utils.Utils.ParseMediaType(
                        iter.Current.Value);
                    break;

                case "mode":
                {
                    switch (iter.Current.Value.ToLower())
                    {
                    case "escaped":
                        contentElement.Mode = Mode.Escaped;
                        break;

                    case "base64":
                        contentElement.Mode = Mode.Base64;
                        break;
                    }
                    break;
                }
                }
            } while(iter.MoveNext());

            switch (contentElement.Mode)
            {
            case Mode.Escaped:
                content = Utils.Utils.Unescape(content);
                break;

            case Mode.Base64:
                content = Encoding.Unicode.GetString(
                    Utils.Utils.Base64Decode(content));
                break;
            }

            contentElement.Content = content;
            return(contentElement);
        }
Ejemplo n.º 3
0
        internal static AtomFeed Parse(XPathNavigator navigator)
        {
            AtomFeed feed = new AtomFeed();

            XPathNavigator    nav  = navigator.Clone();
            XPathNodeIterator iter = nav.SelectChildren(XPathNodeType.All);

            do
            {
                string name = iter.Current.Name.ToLower();
                int    idx  = name.IndexOf(":");
                if (idx != -1)
                {
                    name = name.Split(new char[] { ':' }, 2)[0];
                }

                switch (name)
                {
                case "feed":
                {
                    try
                    {
                        XPathNavigatorReader reader = new XPathNavigatorReader(nav);
                        string baseUri = reader.GetAttribute("base", XmlNamespaces.Xml);
                        if (baseUri != null && baseUri.Length > 0)
                        {
                            feed.XmlBase = new Uri(baseUri);
                        }
                    }
                    catch {}

                    try
                    {
                        feed.Uri = FindAlternateUri(iter.Current);
                    }
                    catch {}

                    try
                    {
                        feed.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
                    }
                    catch {}

                    XPathNodeIterator attrIterator = nav.Select("@*");
                    while (attrIterator.MoveNext())
                    {
                        if (attrIterator.Current.Name.ToLower() == "version")
                        {
                            if (attrIterator.Current.Value != DefaultValues.AtomVersion)
                            {
                                string msg = string.Format("Atom {0} version is not supported!", attrIterator.Current.Value);
                                throw new InvalidOperationException(msg);
                            }
                        }
                    }
                    break;
                }

                case "title":
                    AtomContentConstruct content = AtomContentConstruct.Parse(iter.Current);
                    feed.Title = content;
                    break;

                case "link":
                    feed.Links.Add(AtomLink.Parse(iter.Current));
                    break;

                case "author":
                    feed.Author = AtomPersonConstruct.Parse(iter.Current);
                    break;

                case "contributor":
                    feed.Contributors.Add(AtomPersonConstruct.Parse(iter.Current));
                    break;

                case "tagline":
                    feed.Tagline = AtomContentConstruct.Parse(iter.Current);
                    break;

                case "id":
                    feed.Id = new Uri(iter.Current.Value);
                    break;

                case "copyright":
                    feed.Copyright = AtomContentConstruct.Parse(iter.Current);
                    break;

                case "info":
                    feed.Info = AtomContentConstruct.Parse(iter.Current);
                    break;

                case "modified":
                    feed.Modified = AtomDateConstruct.Parse(iter.Current);
                    break;

                case "entry":
                    feed.Entries.Add(AtomEntry.Parse(iter.Current));
                    break;

                case "dc":
                    feed.AdditionalElements.Add(DcElement.Parse(iter.Current));
                    break;
                }
            } while(iter.MoveNext());

            return(feed);
        }
Ejemplo n.º 4
0
		internal new static AtomContent Parse(XPathNavigator navigator)
		{
			AtomContent contentElement = new AtomContent();
			string content = String.Empty;

			XPathNavigator nav = navigator.Clone();
			
			// select the element itself
			XPathNodeIterator iter = nav.SelectDescendants(XPathNodeType.Element, true);
			while(iter.MoveNext())
			{
				string name = iter.Current.Name.ToLower();
				int idx = name.IndexOf(":");
				if(idx != -1)
					name = name.Split(new char[] {':'}, 2)[1];

				switch(name)
				{
					case "content":
						try
						{
							XPathNavigatorReader navReader = new XPathNavigatorReader(nav);
							string baseUri = navReader.GetAttribute("base", XmlNamespaces.Xml);
							if(baseUri != null && baseUri.Length > 0)
								contentElement.XmlBase =  new Uri(baseUri);
						}
						catch {}

						try
						{
							contentElement.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
						}
						catch {}
						contentElement.LocalName = name;
						XPathNavigatorReader reader = new XPathNavigatorReader(iter.Current);
						reader.Read();
						content = reader.ReadInnerXml();
						break;
				}
			}
			
			// select the attributes
			iter = nav.Select("@*");
			do
			{
				switch(iter.Current.Name.ToLower())
				{
					case "type":
						contentElement.Type = Utils.Utils.ParseMediaType(
							iter.Current.Value);
						break;

					case "mode":
					{
						switch(iter.Current.Value.ToLower())
						{
							case "escaped":
								contentElement.Mode = Mode.Escaped;
								break;

							case "base64":
								contentElement.Mode = Mode.Base64;
								break;
						}
						break;
					}
				}
			} while(iter.MoveNext());

			switch(contentElement.Mode)
			{
				case Mode.Escaped:
					content = Utils.Utils.Unescape(content);
					break;

				case Mode.Base64:
					content = Encoding.Unicode.GetString(
						Utils.Utils.Base64Decode(content));
					break;
			}

			contentElement.Content = content;
			return contentElement;
		}
Ejemplo n.º 5
0
        internal static AtomFeed Parse(XPathNavigator navigator, Uri ns)
        {
            AtomFeed feed = new AtomFeed(ns);

            XPathNavigator nav = navigator.Clone();
            XPathNodeIterator iter = nav.SelectChildren(XPathNodeType.All);

            do
            {
                string name = iter.Current.Name.ToLower();
                int idx = name.IndexOf(":");
                if (idx != -1)
                    name = name.Split(new char[] { ':' }, 2)[1];

                switch (name)
                {
                    case "feed":
                        {
                            try
                            {
                                XPathNavigatorReader reader = new XPathNavigatorReader(nav);
                                string baseUri = reader.GetAttribute("base", XmlNamespaces.Xml);
                                if (baseUri != null && baseUri.Length > 0)
                                    feed.XmlBase = new Uri(baseUri);
                            }
                            catch { }

                            try
                            {
                                feed.Uri = FindAlternateUri(iter.Current, ns);
                            }
                            catch { }

                            try
                            {
                                feed.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
                            }
                            catch { }

                            XPathNodeIterator attrIterator = nav.Select("@*");
                            while (attrIterator.MoveNext())
                            {
                                if (attrIterator.Current.Name.ToLower() == "version")
                                {
                                    if ((attrIterator.Current.Value != DefaultValues.Atom03Version) &&
                                        (attrIterator.Current.Value != DefaultValues.Atom10Version))
                                    {
                                        string msg = String.Format("Atom {0} version is not supported!", attrIterator.Current.Value);
                                        throw new InvalidOperationException(msg);
                                    }
                                }
                            }
                            break;
                        }

                    case "title":
                        AtomContentConstruct titlecontent = AtomContentConstruct.Parse(iter.Current, ns);
                        feed.Title = titlecontent;
                        break;

                    case "subtitle":
                        feed.SubTitle = new AtomContentConstruct("subtitle", iter.Current.Value, ns);
                        break;

                    case "link":
                        feed.Links.Add(AtomLink.Parse(iter.Current, ns));
                        break;

                    case "author":
                        feed.Author = AtomPersonConstruct.Parse(iter.Current, ns);
                        break;

                    case "contributor":
                        feed.Contributors.Add(AtomPersonConstruct.Parse(iter.Current, ns));
                        break;

                    case "tagline":
                        feed.Tagline = AtomContentConstruct.Parse(iter.Current, ns);
                        break;

                    case "id":
                        feed.Id = new Uri(iter.Current.Value);
                        break;

                    case "copyright":
                        feed.Copyright = AtomContentConstruct.Parse(iter.Current, ns);
                        break;

                    case "info":
                        feed.Info = AtomContentConstruct.Parse(iter.Current, ns);
                        break;

                    case "modified":
                        feed.Modified = AtomDateConstruct.Parse(iter.Current, ns);
                        break;

                    case "entry":
                        feed.Entries.Add(AtomEntry.Parse(iter.Current, ns));
                        break;

                }
            } while (iter.MoveNext());

            return feed;
        }