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); }
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) { 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); }