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()); }
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); }
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); }
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()); }
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(); }
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()); }
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(); }
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); }
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()); }
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()); }
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()); }
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 }
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); }
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); }
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); }
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); }
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); }
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(); } }
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); }
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); }
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); }
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); }
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); }
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; }
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); }
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); }
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; }
/// <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; }
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; }
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; }
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); }
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); }