protected override void WriteContentsTo(XmlWriter writer) { if (reader_extension != null) { // It is messy, but it somehow skips the wrapper element... var xr = extension.GetReader(); if (xr.IsEmptyElement) { xr.Read(); } else { xr.ReadStartElement(); // skip it while (xr.NodeType != XmlNodeType.EndElement) { writer.WriteNode(xr, false); } xr.ReadEndElement(); } } else { extension.WriteTo(writer); } }
// does not write start element or type attribute, writes other attributes and rest of content protected override void WriteContentsTo(XmlWriter writer) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } if (_extension != null) { _extension.WriteTo(writer); } else if (_contentBuffer != null) { using (XmlDictionaryReader reader = _contentBuffer.GetReader(0)) { reader.MoveToStartElement(); if (!reader.IsEmptyElement) { reader.ReadStartElement(); while (reader.Depth >= 1 && reader.ReadState == ReadState.Interactive) { writer.WriteNode(reader, false); } } } } }
static string ExtensionToString(SyndicationElementExtension extension) { StringBuilder sb = new StringBuilder(); XmlWriterSettings xws = new XmlWriterSettings(); xws.ConformanceLevel = ConformanceLevel.Fragment; xws.Indent = true; xws.Encoding = Encoding.ASCII; XmlWriter xw = XmlWriter.Create(sb, xws); XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateDictionaryWriter(xw); extension.WriteTo(xdw); xdw.Close(); return sb.ToString(); }
public void WriteToTwice_Reader () { string xml = "<root><child /><child2 /></root>"; StringWriter sw = new StringWriter (); using (XmlWriter w = GetWriter (sw)) { XmlReader r = XmlReader.Create (new StringReader (xml)); r.Read (); r.Read (); // at child SyndicationElementExtension x = new SyndicationElementExtension (r); w.WriteStartElement ("root"); x.WriteTo (w); x.WriteTo (w); // it is VALID. w.WriteEndElement (); } Assert.AreEqual ("<root><child></child><child></child></root>", sw.ToString ()); }
protected override void WriteContentsTo(XmlWriter writer) { extension.WriteTo(writer); }