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 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 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 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 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 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 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); }
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); }
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 XmlDocumentLoading() { string xml = "<customer id='1' pp:id='aba' xmlns='urn-kzu' xmlns:pp='urn-pepenamespace'><pp:order /><order id='1'>Chocolates</order></customer>"; XPathNavigator nav = new XPathDocument(new StringReader(xml)).CreateNavigator(); XmlReader reader = new XPathNavigatorReader(nav); //XmlReader reader = new XmlTextReader(new StringReader(xml)); //reader.MoveToContent(); //Console.WriteLine(reader.ReadOuterXml()); System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out); while (reader.Read()) { tw.Indent = reader.Depth; tw.WriteLine("Name={0}, Type={1}", reader.Name, reader.NodeType); int count = reader.AttributeCount; //reader.MoveToFirstAttribute(); //for (int i = 0; i < count; i++) while (reader.MoveToNextAttribute()) { tw.Indent = reader.Depth; tw.Write("{0}=", reader.Name); reader.ReadAttributeValue(); tw.WriteLine(reader.Value); //reader.MoveToNextAttribute(); } } //reader = new DebuggingXmlTextReader(new XPathNavigatorReader(nav)); reader = new XPathNavigatorReader(nav); XmlDocument doc = new XmlDocument(nav.NameTable); doc.Load( reader ); Assert.AreEqual("customer", doc.DocumentElement.LocalName); Assert.AreEqual("urn-kzu", doc.DocumentElement.NamespaceURI); Assert.AreEqual(4, doc.DocumentElement.Attributes.Count); Assert.AreEqual(2, doc.DocumentElement.ChildNodes.Count); }
/// <summary> /// /// </summary> /// <param name="navigator"></param> /// <returns></returns> internal static AtomContentConstruct parse(XPathNavigator navigator) { AtomContentConstruct result_content = new AtomContentConstruct(); string content = string.Empty; XPathNavigator temp_navigator = navigator.Clone(); XPathNodeIterator it = temp_navigator.SelectDescendants( XPathNodeType.Element, true ); while ( it.MoveNext() ) { string name = it.Current.Name.ToLower(); int colon_index = name.IndexOf( ":" ); if ( colon_index != -1 ) name = name.Split( new char[] { ':' }, 2 )[1]; switch ( name ) { case "title": case "copyright": case "info": case "tagline": case "summary": case "content": try { result_content.XmlLang = AtomUtility.parseLanguage( it.Current.XmlLang ); } catch { } result_content.LocalName = name; XPathNavigatorReader reader = new XPathNavigatorReader( it.Current ); reader.Read(); content = reader.ReadInnerXml(); break; } } it = temp_navigator.Select( "@*" ); do { switch ( it.Current.Name.ToLower() ) { case "type": result_content.Type = AtomUtility.parseMediaType( it.Current.Value ); break; case "mode": switch ( it.Current.Value.ToLower() ) { case "escaped": result_content.Mode = EncodedMode.Escaped; break; case "base64": result_content.Mode = EncodedMode.Base64; break; } break; } } while ( it.MoveNext() ); switch ( result_content.Mode ) { case EncodedMode.Escaped: content = AtomUtility.Unescape( content ); break; case EncodedMode.Base64: content = Encoding.Unicode.GetString( Base64.Decode( content ) ); break; } result_content.Content = content; return result_content; }
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); }
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; }
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; }
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 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); }