示例#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
        public void ExposingXmlFragment()
        {
            string xml = @"
<library>
  <book genre='novel' ISBN='1-861001-57-5'>
     <title>Pride And Prejudice</title>
  </book>
  <book genre='novel' ISBN='1-81920-21-2'>
     <title>Hook</title>
  </book>
</library>";

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

            // <library>
            nav.MoveToFirstChild();
            // <book>
            nav.MoveToFirstChild();

            // Enable fragment reading.
            XPathNavigatorReader reader = new XPathNavigatorReader(nav, true);

            reader.MoveToContent();
            string books = reader.ReadFragmentXml();

            Assert.AreEqual(
                "<book genre=\"novel\" ISBN=\"1-861001-57-5\"><title>Pride And Prejudice</title></book><book genre=\"novel\" ISBN=\"1-81920-21-2\"><title>Hook</title></book>",
                books);
        }
示例#3
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);
        }
示例#4
0
        public void Reading()
        {
            Stream        stm = Globals.GetResource(Globals.PubsNsResource);
            XmlTextReader tr  = new XmlTextReader(stm);

            XPathDocument  doc = new XPathDocument(tr);
            XPathNavigator nav = doc.CreateNavigator();

            // Dumps the entire document to output.
            XmlTextWriter tw = new XmlTextWriter(Console.Out);

            tw.WriteNode(new XPathNavigatorReader(nav), true);

            // Perform a query, then dump the first node (OuterXml) from the result.
            nav = doc.CreateNavigator();
            XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);

            mgr.AddNamespace("mvp", "mvp-xml");
            XPathNodeIterator it = XPathCache.Select("//mvp:titles[mvp:title_id='BU2075']", nav, mgr);

            if (it.MoveNext())
            {
                XmlReader title = new XPathNavigatorReader(it.Current);
                // As it's a regular reader, we must first move it to content as usual.
                title.MoveToContent();
                Console.WriteLine(title.ReadOuterXml());
            }

            // Perform arbitrary movements, then serialize inner content.
            nav = doc.CreateNavigator();
            nav.MoveToFirstChild();
            nav.MoveToFirstChild();
            Console.WriteLine(new XPathNavigatorReader(nav).ReadInnerXml());
        }
示例#5
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());
		}
示例#6
0
        public void LoadAndValidate()
        {
            string path = this.GetType().Namespace + ".";
            Stream stm  = this.GetType().Assembly.GetManifestResourceStream(
                path + "mixedNs.xml");
            string xml = new StreamReader(stm).ReadToEnd();

            XPathDocument        doc = new XPathDocument(new StringReader(xml));
            XPathNavigatorReader nr  = new XPathNavigatorReader(doc.CreateNavigator());

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

            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "ImportedSchema1.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }
            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "ImportedSchema2.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }
            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "RootSchema.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }

            while (vr.Read())
            {
            }

            vr = new XmlValidatingReader(nr);
            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "ImportedSchema1.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }
            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "ImportedSchema2.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }
            using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
                                                          (path + "RootSchema.xsd")))
            {
                vr.Schemas.Add(XmlSchema.Read(sr, null));
            }

            while (vr.Read())
            {
            }

            Console.ReadLine();
        }
示例#7
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());
		}
示例#8
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());
        }
示例#9
0
		public void LoadAndValidate()
		{
			string path = this.GetType().Namespace + ".";
			Stream stm = this.GetType().Assembly.GetManifestResourceStream( 
				path + "mixedNs.xml");
			string xml = new StreamReader(stm).ReadToEnd();

			XPathDocument doc = new XPathDocument(new StringReader(xml));
			XPathNavigatorReader nr = new XPathNavigatorReader(doc.CreateNavigator());

			XmlTextReader tr = new XmlTextReader(new StringReader(xml));
			XmlValidatingReader vr = new XmlValidatingReader(tr);
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "ImportedSchema1.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "ImportedSchema2.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "RootSchema.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}

			while (vr.Read()) {}

			vr = new XmlValidatingReader(nr);
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "ImportedSchema1.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "ImportedSchema2.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}
			using (StreamReader sr = new StreamReader(this.GetType().Assembly.GetManifestResourceStream
					   (path + "RootSchema.xsd")))
			{
				vr.Schemas.Add(XmlSchema.Read(sr, null));
			}

			while (vr.Read()) {}

			Console.ReadLine();
		}
示例#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 TestRead()
        {
            XPathDocument doc = new XPathDocument(Globals.GetResource(Globals.LibraryResource));

            //Navigator over first child of document element
            XPathNavigator nav = doc.CreateNavigator();

            nav.MoveToRoot();
            nav.MoveToFirstChild();
            nav.MoveToFirstChild();
            XPathNavigatorReader r = new XPathNavigatorReader(nav);

            r.MoveToContent();
            Console.WriteLine(r.ReadOuterXml());
        }
示例#12
0
        public void MoveToContent()
        {
            string xml = @"<root><element>1</element><element></element><element>2</element></root>";

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

            XmlReader reader = new XPathNavigatorReader(nav);

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

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

            reader.MoveToContent();
            Console.WriteLine(reader.ReadOuterXml());
        }
示例#13
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());
		}
示例#14
0
        public void FragmentDeserialization()
        {
            #region <publishers> framgment deserialization

            XPathDocument  doc = new XPathDocument(Globals.GetResource(Globals.PubsNsResource));
            XPathNavigator nav = doc.CreateNavigator();

            // Deserialize all publishers.
            XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);
            mgr.AddNamespace("mvp", "mvp-xml");

            XPathExpression expr = nav.Compile("/mvp:dsPubs/mvp:publishers");
            expr.SetContext(mgr);

            XmlSerializer ser = new XmlSerializer(typeof(publishers));

            XPathNodeIterator it = nav.Select(expr);
            while (it.MoveNext())
            {
                XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
                object publisher       = ser.Deserialize(r);
                Assert.IsNotNull(publisher);
            }

            #endregion <publishers> framgment deserialization

            #region <titles> framgment deserialization

            // Now deserialize expensive titles separately.

            expr = nav.Compile("//mvp:titles[mvp:price>10]");
            expr.SetContext(mgr);

            ser = new XmlSerializer(typeof(titles));

            it = nav.Select(expr);
            while (it.MoveNext())
            {
                XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
                object title           = ser.Deserialize(r);
                Assert.IsNotNull(title);
            }

            #endregion <titles> framgment deserialization
        }
示例#15
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());
        }
示例#16
0
        public void ReadInnerXml()
        {
            string xml = @"
<content type='application/xhtml+xml' xml:base='http://loluyede.blogspot.com' xml:lang='en-US' xml:space='preserve'>
	<div xmlns='http://www.w3.org/1999/xhtml'>I have 3 accounts to give away, let me know if you want them</div>
</content>";

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

            XPathNavigatorReader r = new XPathNavigatorReader(nav);

            r.MoveToContent();
            string content = r.ReadInnerXml();

            Assert.AreEqual(
                "\r\n\t<div xmlns=\"http://www.w3.org/1999/xhtml\">I have 3 accounts to give away, let me know if you want them</div>\r\n",
                content);
        }
示例#17
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);
        }
示例#18
0
        public void XPathDocumentLoading()
        {
            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);
            XPathNavigator clone  = new XPathDocument(reader).CreateNavigator();

            clone.MoveToFirstChild();
            Assert.AreEqual("customer", clone.LocalName);
            Assert.AreEqual("urn-kzu", clone.NamespaceURI);

            clone.MoveToAttribute("id", "urn-pepenamespace");
            Assert.AreEqual("aba", clone.Value);

            clone.MoveToParent();
            clone.MoveToFirstChild();
            Assert.AreEqual("pp:order", clone.Name);
            Assert.IsTrue(clone.IsEmptyElement);
        }
示例#19
0
        public void EmptyElementRead()
        {
            string xml = @"<root><element>1</element><element></element><element>2</element></root>";

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

            doc.Load(reader);

            Console.WriteLine(doc.OuterXml);

            xml = @"<root><element>1</element><element/><element>2</element></root>";

            nav    = new XPathDocument(new XmlTextReader(new StringReader(xml))).CreateNavigator();
            reader = new XPathNavigatorReader(nav);
            doc    = new XmlDocument();
            doc.Load(reader);

            Console.WriteLine(doc.OuterXml);
        }
示例#20
0
        public void XPathDocumentFragmentLoading()
        {
            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();

            // <customer>
            nav.MoveToFirstChild();
            // <pp:order>
            nav.MoveToFirstChild();
            // <order>
            nav.MoveToNext();

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

            clone.MoveToFirstChild();

            Assert.AreEqual("order", clone.LocalName);
            Assert.AreEqual("urn-kzu", clone.NamespaceURI);
        }
示例#21
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();
            }
        }
示例#22
0
        public void XmlDocumentFragmentLoading()
        {
            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();

            // <customer>
            nav.MoveToFirstChild();
            // <pp:order>
            nav.MoveToFirstChild();
            // <order>
            nav.MoveToNext();

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

            doc.Load(reader);

            Assert.AreEqual("order", doc.DocumentElement.LocalName);
            Assert.AreEqual("urn-kzu", doc.DocumentElement.NamespaceURI);
            Assert.AreEqual(1, doc.DocumentElement.Attributes.Count);
        }
示例#23
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void FragmentDeserialization()
		{
			#region <publishers> framgment deserialization

			XPathDocument doc = new XPathDocument(Globals.GetResource(Globals.PubsNsResource));
			XPathNavigator nav = doc.CreateNavigator();

			// Deserialize all publishers.
			XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);
			mgr.AddNamespace("mvp", "mvp-xml");

			XPathExpression expr = nav.Compile("/mvp:dsPubs/mvp:publishers");
			expr.SetContext(mgr);

			XmlSerializer ser = new XmlSerializer(typeof(publishers));			

			XPathNodeIterator it = nav.Select(expr);
			while (it.MoveNext())
			{
				XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
				object publisher = ser.Deserialize(r);
				Assert.IsNotNull(publisher);
			}

			#endregion <publishers> framgment deserialization

			#region <titles> framgment deserialization

			// Now deserialize expensive titles separately.

			expr = nav.Compile("//mvp:titles[mvp:price>10]");
			expr.SetContext(mgr);

			ser = new XmlSerializer(typeof(titles));

			it = nav.Select(expr);
			while (it.MoveNext())
			{
				XPathNavigatorReader r = new XPathNavigatorReader(it.Current);
				object title = ser.Deserialize(r);
				Assert.IsNotNull(title);
			}

			#endregion <titles> framgment deserialization
		}
示例#24
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void Reading()
		{
			Stream stm = Globals.GetResource(Globals.PubsNsResource);
			XmlTextReader tr = new XmlTextReader(stm);

			XPathDocument doc = new XPathDocument(tr);
			XPathNavigator nav = doc.CreateNavigator();

			// Dumps the entire document to output.
			XmlTextWriter tw = new XmlTextWriter(Console.Out);
			tw.WriteNode(new XPathNavigatorReader(nav), true);

			// Perform a query, then dump the first node (OuterXml) from the result.
			nav = doc.CreateNavigator();
			XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);
			mgr.AddNamespace("mvp", "mvp-xml");
			XPathNodeIterator it = XPathCache.Select("//mvp:titles[mvp:title_id='BU2075']", nav, mgr);
			if (it.MoveNext())
			{
				XmlReader title = new XPathNavigatorReader(it.Current);
				// As it's a regular reader, we must first move it to content as usual.
				title.MoveToContent();
				Console.WriteLine(title.ReadOuterXml());
			}

			// Perform arbitrary movements, then serialize inner content.
			nav = doc.CreateNavigator();
			nav.MoveToFirstChild();
			nav.MoveToFirstChild();
			Console.WriteLine(new XPathNavigatorReader(nav).ReadInnerXml());
		}
示例#25
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void MoveToContent()
		{
			string xml = @"<root><element>1</element><element></element><element>2</element></root>";

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

			XmlReader reader = new XPathNavigatorReader(nav);

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

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

			reader.MoveToContent();
			Console.WriteLine(reader.ReadOuterXml());
		}
示例#26
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void ReadInnerXml()
		{
			string xml = @"
<content type='application/xhtml+xml' xml:base='http://loluyede.blogspot.com' xml:lang='en-US' xml:space='preserve'>
	<div xmlns='http://www.w3.org/1999/xhtml'>I have 3 accounts to give away, let me know if you want them</div>
</content>";

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

			XPathNavigatorReader r = new XPathNavigatorReader(nav);
			r.MoveToContent();
			string content = r.ReadInnerXml();
			
			Assert.AreEqual(
				"\r\n\t<div xmlns=\"http://www.w3.org/1999/xhtml\">I have 3 accounts to give away, let me know if you want them</div>\r\n",
				content);
		}
示例#27
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void XPathDocumentFragmentLoading()
		{
			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();

			// <customer>
			nav.MoveToFirstChild();
			// <pp:order>
			nav.MoveToFirstChild();
			// <order>
			nav.MoveToNext();
			
			XmlReader reader = new XPathNavigatorReader(nav);
			XPathNavigator clone = new XPathDocument(reader).CreateNavigator();
			clone.MoveToFirstChild();
           
			Assert.AreEqual("order", clone.LocalName);
			Assert.AreEqual("urn-kzu", clone.NamespaceURI);
		}
示例#28
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void EmptyElementRead()
		{
			string xml = @"<root><element>1</element><element></element><element>2</element></root>";

			XPathNavigator nav = new XPathDocument(new XmlTextReader(new StringReader(xml))).CreateNavigator();
			XmlReader reader = new XPathNavigatorReader(nav);
			XmlDocument doc = new XmlDocument();
			doc.Load(reader);

			Console.WriteLine(doc.OuterXml);

			xml = @"<root><element>1</element><element/><element>2</element></root>";

			nav = new XPathDocument(new XmlTextReader(new StringReader(xml))).CreateNavigator();
			reader = new XPathNavigatorReader(nav);
			doc = new XmlDocument();
			doc.Load(reader);

			Console.WriteLine(doc.OuterXml);
		}
示例#29
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);
        }
示例#30
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);
        }
示例#31
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);
		}
示例#32
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);
        }
示例#33
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;
        }
示例#34
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void XmlDocumentFragmentLoading()
		{
			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();

			// <customer>
			nav.MoveToFirstChild();
			// <pp:order>
			nav.MoveToFirstChild();
			// <order>
			nav.MoveToNext();
			
			XmlReader reader = new XPathNavigatorReader(nav);
			XmlDocument doc = new XmlDocument(nav.NameTable);
			doc.Load( reader );
           
			Assert.AreEqual("order", doc.DocumentElement.LocalName);
			Assert.AreEqual("urn-kzu", doc.DocumentElement.NamespaceURI);
			Assert.AreEqual(1, doc.DocumentElement.Attributes.Count);
		}
示例#35
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);
		}
示例#36
0
文件: AtomFeed.cs 项目: dblock/sncore
        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;
        }
示例#37
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void XPathDocumentLoading()
		{
			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);
			XPathNavigator clone = new XPathDocument(reader).CreateNavigator();
           
			clone.MoveToFirstChild();
			Assert.AreEqual("customer", clone.LocalName);
			Assert.AreEqual("urn-kzu", clone.NamespaceURI);

			clone.MoveToAttribute("id", "urn-pepenamespace");
			Assert.AreEqual("aba", clone.Value);

			clone.MoveToParent();
			clone.MoveToFirstChild();
			Assert.AreEqual("pp:order", clone.Name);
			Assert.IsTrue(clone.IsEmptyElement);			
		}
        /// <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;
        }
示例#39
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;
        }
示例#40
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;
		}
示例#41
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void ExposingSubtreeXmlFragment()
		{
			string xml = @"
<library>
  <book genre='novel' ISBN='1-861001-57-5'>
     <title>Pride And Prejudice</title>
  </book>
  <book genre='novel' ISBN='1-81920-21-2'>
     <title>Hook</title>
  </book>
</library>";

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

			// <library>
			nav.MoveToFirstChild();
			// <book>
			nav.MoveToFirstChild();

			SubtreeeXPathNavigator sub = new SubtreeeXPathNavigator(nav, true);			
			// Enable fragment reading.
			XPathNavigatorReader reader = new XPathNavigatorReader(sub, true);
			reader.MoveToContent();
			string books = reader.ReadFragmentXml();

			sub.MoveToRoot();
			reader = new XPathNavigatorReader(sub, true);
			reader.MoveToContent();
			string books2 = reader.ReadFragmentXml();

			Assert.AreEqual(books, books2);
			Assert.AreEqual(
				"<book genre=\"novel\" ISBN=\"1-861001-57-5\"><title>Pride And Prejudice</title></book><book genre=\"novel\" ISBN=\"1-81920-21-2\"><title>Hook</title></book>", 
				books);
		}
示例#42
0
文件: Tests.cs 项目: zanyants/mvp.xml
		public void TestRead()
		{
			XPathDocument doc = new XPathDocument(Globals.GetResource(Globals.LibraryResource));

			//Navigator over first child of document element
			XPathNavigator nav = doc.CreateNavigator();
			nav.MoveToRoot();
			nav.MoveToFirstChild();
			nav.MoveToFirstChild();
			XPathNavigatorReader r = new XPathNavigatorReader(nav);
			r.MoveToContent();
            Console.WriteLine(r.ReadOuterXml());
		}
示例#43
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();
			}
		}
示例#44
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);
        }
示例#45
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);
		}