示例#1
0
        public void TestComment()
        {
            string xml = @"<?xml version='1.0'?>
<!-- comment -->
<?an arbitrary PI ?>
<!-- another comment -->
<foo />";

            XmlReader tr = new XmlTextReader(new StringReader(xml));
            XmlWriter tw = new XmlTextWriter(Console.Out);
            //tw.WriteNode(tr, false);
            //Console.WriteLine();

            XPathDocument  doc = new XPathDocument(new StringReader(xml));
            XPathNavigator nav = doc.CreateNavigator();

            XPathNavigatorReader reader = new XPathNavigatorReader(nav);

            //tw.WriteNode(reader, false);
            tw.Close();

            reader = new XPathNavigatorReader(nav);
            Assert.IsTrue(reader.Read());
            Assert.AreEqual(XmlNodeType.Comment, reader.NodeType);
            Assert.IsTrue(reader.Read());
            Assert.AreEqual(XmlNodeType.ProcessingInstruction, reader.NodeType);
            Assert.IsTrue(reader.Read());
            Assert.AreEqual(XmlNodeType.Comment, reader.NodeType);
            Assert.IsTrue(reader.Read());
            Assert.AreEqual(XmlNodeType.Element, reader.NodeType);
            Assert.IsTrue(reader.IsEmptyElement);
            Assert.IsFalse(reader.Read());
        }
示例#2
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void TestComment()
		{
			string xml = @"<?xml version='1.0'?>
<!-- comment -->
<?an arbitrary PI ?>
<!-- another comment -->
<foo />";

			XmlReader tr = new XmlTextReader(new StringReader(xml));
			XmlWriter tw = new XmlTextWriter(Console.Out);
			//tw.WriteNode(tr, false);
			//Console.WriteLine();

			XPathDocument doc = new XPathDocument(new StringReader(xml));
			XPathNavigator nav = doc.CreateNavigator();

			XPathNavigatorReader reader = new XPathNavigatorReader(nav);
			//tw.WriteNode(reader, false);
			tw.Close();

			reader = new XPathNavigatorReader(nav);
			Assert.IsTrue(reader.Read());
			Assert.AreEqual(XmlNodeType.Comment, reader.NodeType);
			Assert.IsTrue(reader.Read());
			Assert.AreEqual(XmlNodeType.ProcessingInstruction, reader.NodeType);
			Assert.IsTrue(reader.Read());            
			Assert.AreEqual(XmlNodeType.Comment, reader.NodeType);
			Assert.IsTrue(reader.Read());
			Assert.AreEqual(XmlNodeType.Element, reader.NodeType);
			Assert.IsTrue(reader.IsEmptyElement);
			Assert.IsFalse(reader.Read());
		}
示例#3
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void TestEmptyRoot()
		{
			string xml = "<root/>";
			XPathDocument doc = new XPathDocument(new StringReader(xml));
			XPathNavigator nav = doc.CreateNavigator();

			XPathNavigatorReader reader = new XPathNavigatorReader(nav);
			Assert.IsTrue(reader.Read());
			Assert.AreEqual(XmlNodeType.Element, reader.NodeType);
			Assert.IsTrue(reader.IsEmptyElement);
			Assert.IsFalse(reader.Read());
		}
示例#4
0
        public void TestEmptyRoot()
        {
            string         xml = "<root/>";
            XPathDocument  doc = new XPathDocument(new StringReader(xml));
            XPathNavigator nav = doc.CreateNavigator();

            XPathNavigatorReader reader = new XPathNavigatorReader(nav);

            Assert.IsTrue(reader.Read());
            Assert.AreEqual(XmlNodeType.Element, reader.NodeType);
            Assert.IsTrue(reader.IsEmptyElement);
            Assert.IsFalse(reader.Read());
        }
示例#5
0
        public void XmlReaderNames()
        {
            string xml = "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><pp:order /><order id='1'>Chocolates</order></customer>";

            XPathNavigator nav    = new XPathDocument(new StringReader(xml)).CreateNavigator();
            XmlReader      reader = new XPathNavigatorReader(nav);

            reader.MoveToContent();
            Assert.AreEqual("customer", reader.Name);

            reader.MoveToFirstAttribute();
            Assert.AreEqual("id", reader.Name);

            reader.MoveToNextAttribute();
            Assert.AreEqual("pp:id", reader.Name);

            // Namespace order is not guaranteed.
            reader.MoveToNextAttribute();
            Assert.IsTrue(reader.Name == "xmlns:pp" || reader.Name == "xmlns");
            reader.MoveToNextAttribute();
            Assert.IsTrue(reader.Name == "xmlns:pp" || reader.Name == "xmlns");

            reader.MoveToElement();
            reader.Read();

            Assert.AreEqual("pp:order", reader.Name);
        }
示例#6
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void OlegEvilTest()
		{
			string xml = @"<foo><?pi text?>evil</foo>";
			XPathDocument doc = new XPathDocument(new StringReader(xml));
			XPathNodeIterator ni =
				doc.CreateNavigator().Select("//processing-instruction()");
			Assert.IsTrue(ni.MoveNext());
			XPathNavigatorReader r = new XPathNavigatorReader(ni.Current);
			Assert.IsTrue(r.Read());
			Console.WriteLine("NodeType: {0}, Name: {1}, Value: {2}",
				r.NodeType, r.Name, r.Value);
			Assert.AreEqual(XmlNodeType.ProcessingInstruction, r.NodeType);
			Assert.IsTrue(r.Read());
            Assert.AreEqual(XmlNodeType.Text, r.NodeType);
            Assert.IsFalse(r.Read());
		}
示例#7
0
        public void OlegEvilTest()
        {
            string            xml = @"<foo><?pi text?>evil</foo>";
            XPathDocument     doc = new XPathDocument(new StringReader(xml));
            XPathNodeIterator ni  =
                doc.CreateNavigator().Select("//processing-instruction()");

            Assert.IsTrue(ni.MoveNext());
            XPathNavigatorReader r = new XPathNavigatorReader(ni.Current);

            Assert.IsTrue(r.Read());
            Console.WriteLine("NodeType: {0}, Name: {1}, Value: {2}",
                              r.NodeType, r.Name, r.Value);
            Assert.AreEqual(XmlNodeType.ProcessingInstruction, r.NodeType);
            Assert.IsTrue(r.Read());
            Assert.AreEqual(XmlNodeType.Text, r.NodeType);
            Assert.IsFalse(r.Read());
        }
示例#8
0
        public void TestSiblingRead()
        {
            string xml = @"<foo><bar/><baz/></foo>";

            XmlTextReader tr = new XmlTextReader(new StringReader(xml));

            tr.MoveToContent();
            Assert.AreEqual("foo", tr.LocalName);

            XPathDocument     doc = new XPathDocument(new StringReader(xml));
            XPathNavigator    nav = doc.CreateNavigator();
            XPathNodeIterator ni  = nav.Select("/foo/bar");

            if (ni.MoveNext())
            {
                XPathNavigatorReader r = new XPathNavigatorReader(ni.Current);
                Assert.IsTrue(r.Read());
                Assert.AreEqual("bar", r.LocalName);
                Assert.IsFalse(r.Read());
                r.Close();
            }
        }
示例#9
0
        public void XmlDocumentLoading()
        {
            string xml = "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><pp:order /><order id='1'>Chocolates</order></customer>";

            XPathNavigator nav = new XPathDocument(new StringReader(xml)).CreateNavigator();

            XmlReader reader = new XPathNavigatorReader(nav);

            //XmlReader reader = new XmlTextReader(new StringReader(xml));

            //reader.MoveToContent();
            //Console.WriteLine(reader.ReadOuterXml());

            System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out);

            while (reader.Read())
            {
                tw.Indent = reader.Depth;
                tw.WriteLine("Name={0}, Type={1}", reader.Name, reader.NodeType);
                int count = reader.AttributeCount;
                //reader.MoveToFirstAttribute();
                //for (int i = 0; i < count; i++)
                while (reader.MoveToNextAttribute())
                {
                    tw.Indent = reader.Depth;
                    tw.Write("{0}=", reader.Name);
                    reader.ReadAttributeValue();
                    tw.WriteLine(reader.Value);
                    //reader.MoveToNextAttribute();
                }
            }

            //reader = new DebuggingXmlTextReader(new XPathNavigatorReader(nav));
            reader = new XPathNavigatorReader(nav);
            XmlDocument doc = new XmlDocument(nav.NameTable);

            doc.Load(reader);

            Assert.AreEqual("customer", doc.DocumentElement.LocalName);
            Assert.AreEqual("urn-kzu", doc.DocumentElement.NamespaceURI);
            Assert.AreEqual(4, doc.DocumentElement.Attributes.Count);
            Assert.AreEqual(2, doc.DocumentElement.ChildNodes.Count);
        }
示例#10
0
        public void SimpleReading()
        {
            XPathDocument doc = new XPathDocument(new StringReader(
                                                      "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><order id='1'>Chocolates</order></customer>"));
            XPathNavigator nav = doc.CreateNavigator();

            XmlReader reader = new XPathNavigatorReader(nav);

            reader.Read();
            Assert.AreEqual("customer", reader.LocalName);
            Assert.AreEqual("urn-kzu", reader.NamespaceURI);
            Assert.AreEqual(4, reader.AttributeCount);
            // @id
            reader.MoveToFirstAttribute();
            Assert.AreEqual("id", reader.LocalName);
            // @pp:id
            reader.MoveToNextAttribute();
            Assert.AreEqual("id", reader.LocalName);
            Assert.AreEqual("urn-pepenamespace", reader.NamespaceURI);
            // xmlns="urn-kzu" and xmlns:pp="urn-pepenamespace". Order is not guaranteed.
            reader.MoveToNextAttribute();
            Assert.AreEqual(XmlNamespaces.XmlNs, reader.NamespaceURI);
            reader.MoveToNextAttribute();
            Assert.AreEqual(XmlNamespaces.XmlNs, reader.NamespaceURI);

            reader.Read();
            Assert.AreEqual("order", reader.LocalName);
            Assert.AreEqual("urn-kzu", reader.NamespaceURI);
            Assert.AreEqual(1, reader.AttributeCount);
            reader.MoveToFirstAttribute();
            Assert.AreEqual("id", reader.LocalName);
            Assert.IsTrue(reader.ReadAttributeValue());
            Assert.AreEqual("1", reader.Value);
            Assert.IsFalse(reader.MoveToNextAttribute());

            reader.Read();
            Assert.AreEqual(XmlNodeType.Text, reader.NodeType);
            Assert.AreEqual("Chocolates", reader.Value);

            reader.Read();
            Assert.AreEqual("order", reader.LocalName);
            Assert.AreEqual(XmlNodeType.EndElement, reader.NodeType);

            reader.Read();
            Assert.AreEqual("customer", reader.LocalName);
            Assert.AreEqual(XmlNodeType.EndElement, reader.NodeType);

            reader.Read();
            Assert.AreEqual(ReadState.EndOfFile, reader.ReadState);
        }
示例#11
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void TestSiblingRead()
		{
			string xml = @"<foo><bar/><baz/></foo>"; 

			XmlTextReader tr = new XmlTextReader(new StringReader(xml));
			tr.MoveToContent();
			Assert.AreEqual("foo", tr.LocalName);

			XPathDocument doc = new XPathDocument(new StringReader(xml)); 
			XPathNavigator nav = doc.CreateNavigator(); 
			XPathNodeIterator ni = nav.Select("/foo/bar"); 
			if (ni.MoveNext()) 
			{
				XPathNavigatorReader r = new XPathNavigatorReader(ni.Current);
				Assert.IsTrue(r.Read());
				Assert.AreEqual("bar", r.LocalName);
				Assert.IsFalse(r.Read());
				r.Close();
			}
		}
示例#12
0
        internal static AtomContentConstruct Parse(XPathNavigator navigator)
        {
            AtomContentConstruct contentElement = new AtomContentConstruct();
            string content = String.Empty;

            XPathNavigator nav = navigator.Clone();

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

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

                switch (name)
                {
                case "title":
                case "copyright":
                case "info":
                case "tagline":
                case "summary":
                case "content":
                    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 (StringUtils.ToLower(iter.Current.Name))
                {
                case "type":
                    contentElement.Type = Utils.Utils.ParseMediaType(
                        iter.Current.Value);
                    break;

                case "mode":
                {
                    switch (StringUtils.ToLower(iter.Current.Value))
                    {
                    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);
        }
示例#13
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void XmlReaderNames()
		{
			string xml = "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><pp:order /><order id='1'>Chocolates</order></customer>";

			XPathNavigator nav = new XPathDocument(new StringReader(xml)).CreateNavigator();
			XmlReader reader = new XPathNavigatorReader(nav);

			reader.MoveToContent();
			Assert.AreEqual("customer", reader.Name);
			
			reader.MoveToFirstAttribute();
			Assert.AreEqual("id", reader.Name);

			reader.MoveToNextAttribute();
			Assert.AreEqual("pp:id", reader.Name);
		
			// Namespace order is not guaranteed.
            reader.MoveToNextAttribute();
			Assert.IsTrue( reader.Name == "xmlns:pp" || reader.Name == "xmlns" );
			reader.MoveToNextAttribute();
			Assert.IsTrue( reader.Name == "xmlns:pp" || reader.Name == "xmlns" );

			reader.MoveToElement();
			reader.Read();

			Assert.AreEqual("pp:order", reader.Name);
		}
示例#14
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void XmlDocumentLoading()
		{
			string xml = "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><pp:order /><order id='1'>Chocolates</order></customer>";

			XPathNavigator nav = new XPathDocument(new StringReader(xml)).CreateNavigator();

			XmlReader reader = new XPathNavigatorReader(nav);
			//XmlReader reader = new XmlTextReader(new StringReader(xml));

			//reader.MoveToContent();
			//Console.WriteLine(reader.ReadOuterXml());

			System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out);

			while (reader.Read())
			{
				tw.Indent = reader.Depth;
				tw.WriteLine("Name={0}, Type={1}", reader.Name, reader.NodeType);
				int count = reader.AttributeCount;
				//reader.MoveToFirstAttribute();
				//for (int i = 0; i < count; i++) 
				while (reader.MoveToNextAttribute())
				{
					tw.Indent = reader.Depth;
					tw.Write("{0}=", reader.Name);
					reader.ReadAttributeValue();
					tw.WriteLine(reader.Value);
					//reader.MoveToNextAttribute();
				}
			}

			//reader = new DebuggingXmlTextReader(new XPathNavigatorReader(nav));
			reader = new XPathNavigatorReader(nav);
			XmlDocument doc = new XmlDocument(nav.NameTable);
			doc.Load( reader );
           
			Assert.AreEqual("customer", doc.DocumentElement.LocalName);
			Assert.AreEqual("urn-kzu", doc.DocumentElement.NamespaceURI);
			Assert.AreEqual(4, doc.DocumentElement.Attributes.Count);
			Assert.AreEqual(2, doc.DocumentElement.ChildNodes.Count);
		}
        /// <summary>
        /// 
        /// </summary>
        /// <param name="navigator"></param>
        /// <returns></returns>
        internal static AtomContentConstruct parse(XPathNavigator navigator) {
            AtomContentConstruct result_content = new AtomContentConstruct();
            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 "title":
                    case "copyright":
                    case "info":
                    case "tagline":
                    case "summary":
                    case "content":
                        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;

                    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;
        }
示例#16
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);
        }
示例#17
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void SimpleReading()
		{
			XPathDocument doc = new XPathDocument(new StringReader(
				"<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><order id='1'>Chocolates</order></customer>"));
			XPathNavigator nav = doc.CreateNavigator();

			XmlReader reader = new XPathNavigatorReader(nav);

			reader.Read();
			Assert.AreEqual("customer", reader.LocalName);
			Assert.AreEqual("urn-kzu", reader.NamespaceURI);
			Assert.AreEqual(4, reader.AttributeCount);
			// @id
			reader.MoveToFirstAttribute();
			Assert.AreEqual("id", reader.LocalName);
			// @pp:id
			reader.MoveToNextAttribute();
			Assert.AreEqual("id", reader.LocalName);
			Assert.AreEqual("urn-pepenamespace", reader.NamespaceURI);
			// xmlns="urn-kzu" and xmlns:pp="urn-pepenamespace". Order is not guaranteed.
			reader.MoveToNextAttribute();
			Assert.AreEqual(XmlNamespaces.XmlNs, reader.NamespaceURI);
			reader.MoveToNextAttribute();
			Assert.AreEqual(XmlNamespaces.XmlNs, reader.NamespaceURI);
            
			reader.Read();
			Assert.AreEqual("order", reader.LocalName);
			Assert.AreEqual("urn-kzu", reader.NamespaceURI);
			Assert.AreEqual(1, reader.AttributeCount);
			reader.MoveToFirstAttribute();
			Assert.AreEqual("id", reader.LocalName);
			Assert.IsTrue(reader.ReadAttributeValue());
            Assert.AreEqual("1", reader.Value);
			Assert.IsFalse(reader.MoveToNextAttribute());

			reader.Read();
			Assert.AreEqual(XmlNodeType.Text, reader.NodeType);
			Assert.AreEqual("Chocolates", reader.Value);

			reader.Read();
			Assert.AreEqual("order", reader.LocalName);
			Assert.AreEqual(XmlNodeType.EndElement, reader.NodeType);

			reader.Read();
			Assert.AreEqual("customer", reader.LocalName);
			Assert.AreEqual(XmlNodeType.EndElement, reader.NodeType);

			reader.Read();
			Assert.AreEqual(ReadState.EndOfFile, reader.ReadState);
		}
示例#18
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;
		}
示例#19
0
        internal static AtomContentConstruct Parse(XPathNavigator navigator, Uri ns)
        {
            AtomContentConstruct contentElement = new AtomContentConstruct(ns);
            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 "title":
                    case "copyright":
                    case "info":
                    case "tagline":
                    case "summary":
                    case "content":
                        try
                        {
                            contentElement.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
                        }
                        catch { }
                        contentElement.LocalName = name;
                        XPathNavigatorReader reader = new XPathNavigatorReader(iter.Current);
                        bool fread = reader.Read();
                        if (iter.Current.HasChildren) // dblock: bug 149
                        {
                            content = reader.ReadInnerXml();
                        }
                        break;
                }
            }

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

                        switch (iter.Current.Value)
                        {
                                // shortcut used, doesn't look like compliant to spec, should be text/html, mode="escaped"
                            case "html":
                                contentElement.Mode = Mode.Escaped;
                                contentElement.Type = MediaType.TextHtml;
                                break;
                            default:
                                contentElement.Type = Utils.Utils.ParseMediaType(
                                    iter.Current.Value);
                                break;
                        }
                        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;
        }
示例#20
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;
        }
示例#21
0
        internal static AtomContentConstruct Parse(XPathNavigator navigator, Uri ns)
        {
            AtomContentConstruct contentElement = new AtomContentConstruct(ns);
            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 "title":
                case "copyright":
                case "info":
                case "tagline":
                case "summary":
                case "content":
                    try
                    {
                        contentElement.XmlLang = Utils.Utils.ParseLanguage(iter.Current.XmlLang);
                    }
                    catch { }
                    contentElement.LocalName = name;
                    XPathNavigatorReader reader = new XPathNavigatorReader(iter.Current);
                    bool fread = reader.Read();
                    if (iter.Current.HasChildren)     // dblock: bug 149
                    {
                        content = reader.ReadInnerXml();
                    }
                    break;
                }
            }

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

                    switch (iter.Current.Value)
                    {
                    // shortcut used, doesn't look like compliant to spec, should be text/html, mode="escaped"
                    case "html":
                        contentElement.Mode = Mode.Escaped;
                        contentElement.Type = MediaType.TextHtml;
                        break;

                    default:
                        contentElement.Type = Utils.Utils.ParseMediaType(
                            iter.Current.Value);
                        break;
                    }
                    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);
        }