internal override void WriteTimestamp(XmlDictionaryWriter writer, SecurityTimestamp timestamp) { writer.WriteStartElement(System.ServiceModel.XD.UtilityDictionary.Prefix.Value, System.ServiceModel.XD.UtilityDictionary.Timestamp, System.ServiceModel.XD.UtilityDictionary.Namespace); writer.WriteAttributeString(System.ServiceModel.XD.UtilityDictionary.IdAttribute, System.ServiceModel.XD.UtilityDictionary.Namespace, timestamp.Id); writer.WriteStartElement(System.ServiceModel.XD.UtilityDictionary.CreatedElement, System.ServiceModel.XD.UtilityDictionary.Namespace); char[] creationTimeChars = timestamp.GetCreationTimeChars(); writer.WriteChars(creationTimeChars, 0, creationTimeChars.Length); writer.WriteEndElement(); writer.WriteStartElement(System.ServiceModel.XD.UtilityDictionary.ExpiresElement, System.ServiceModel.XD.UtilityDictionary.Namespace); char[] expiryTimeChars = timestamp.GetExpiryTimeChars(); writer.WriteChars(expiryTimeChars, 0, expiryTimeChars.Length); writer.WriteEndElement(); writer.WriteEndElement(); }
internal override void WriteTimestamp(XmlDictionaryWriter writer, SecurityTimestamp timestamp) { writer.WriteStartElement(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.Timestamp, XD.UtilityDictionary.Namespace); writer.WriteAttributeString(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace, timestamp.Id); writer.WriteStartElement(XD.UtilityDictionary.CreatedElement, XD.UtilityDictionary.Namespace); char[] creationTime = timestamp.GetCreationTimeChars(); writer.WriteChars(creationTime, 0, creationTime.Length); writer.WriteEndElement(); // wsu:Created writer.WriteStartElement(XD.UtilityDictionary.ExpiresElement, XD.UtilityDictionary.Namespace); char[] expiryTime = timestamp.GetExpiryTimeChars(); writer.WriteChars(expiryTime, 0, expiryTime.Length); writer.WriteEndElement(); // wsu:Expires writer.WriteEndElement(); }
/// <summary> /// When overridden in a derived class, writes text one buffer at a time. /// </summary> /// <param name="buffer">Character array containing the text to write.</param> /// <param name="index">The position in the buffer indicating the start of the text to write.</param> /// <param name="count">The number of characters to write.</param> public override void WriteChars(char[] buffer, int index, int count) { _innerWriter.WriteChars(buffer, index, count); if (_tracingWriter != null) { _tracingWriter.WriteChars(buffer, index, count); } }
public void UseCase2() { XmlDictionary dic = new XmlDictionary(); MemoryStream ms = new MemoryStream(); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter(ms, dic, null); XmlDictionaryString empty = dic.Add(String.Empty); // empty ns w.WriteStartElement(dic.Add("FOO"), empty); // non-dic string w.WriteStartElement("BAR"); // second time ns w.WriteStartElement(dic.Add("FOO"), empty); // first time dic string but prior non-dic name existed w.WriteStartElement(dic.Add("BAR"), empty); w.WriteEndElement(); w.WriteEndElement(); w.WriteEndElement(); // dicstr w/ ns with empty prefix w.WriteStartElement(dic.Add("BAR"), dic.Add("urn:bar")); // with prefix w.WriteStartElement("ppp", dic.Add("BAR"), dic.Add("urn:bar")); w.WriteChars(new char [] { 'x', 'y', 'z' }, 0, 3); // w.WriteString ("xyz"); // the same as WriteChars() w.WriteEndElement(); w.WriteString("bbbb"); w.WriteCData("ccc"); w.WriteValue(new Guid("11112222333344445555666677778888")); w.WriteEndElement(); w.WriteStartElement("FOO"); w.WriteStartAttribute("AAA"); w.WriteValue(new Guid("11112222333344445555666677778888")); w.WriteEndAttribute(); w.WriteStartAttribute("BBB"); w.WriteValue(TimeSpan.Zero); w.WriteEndAttribute(); w.WriteStartAttribute("CC"); w.WriteValue(new UniqueId("uuid-00000000-0000-0000-0000-000000000000-1")); w.WriteEndAttribute(); w.WriteStartElement("XX"); w.WriteValue(true); w.WriteValue(false); w.WriteEndElement(); w.WriteStartElement("xx", "aaa", "urn:zzz"); w.WriteEndElement(); w.WriteEndElement(); w.Close(); Assert.AreEqual(usecase2_result, ms.ToArray()); }
public override void WriteChars(char[] buffer, int index, int count) { _innerWriter.WriteChars(buffer, index, count); }
public static async Task WriteNodeAsync(XmlDictionaryWriter writer, XmlReader reader, bool defattr) { char[] writeNodeBuffer = null; const int WriteNodeBufferSize = 1024; if (null == reader) { throw new ArgumentNullException(nameof(reader)); } bool canReadChunk = reader.CanReadValueChunk; int d = reader.NodeType == XmlNodeType.None ? -1 : reader.Depth; do { switch (reader.NodeType) { case XmlNodeType.Element: writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI); writer.WriteAttributes(reader, defattr); if (reader.IsEmptyElement) { writer.WriteEndElement(); break; } break; case XmlNodeType.Text: if (canReadChunk) { if (writeNodeBuffer == null) { writeNodeBuffer = new char[WriteNodeBufferSize]; } int read; while ((read = reader.ReadValueChunk(writeNodeBuffer, 0, WriteNodeBufferSize)) > 0) { writer.WriteChars(writeNodeBuffer, 0, read); } } else { writer.WriteString(await reader.GetValueAsync()); } break; case XmlNodeType.Whitespace: case XmlNodeType.SignificantWhitespace: writer.WriteWhitespace(await reader.GetValueAsync()); break; case XmlNodeType.CDATA: writer.WriteCData(await reader.GetValueAsync()); break; case XmlNodeType.EntityReference: writer.WriteEntityRef(reader.Name); break; case XmlNodeType.XmlDeclaration: case XmlNodeType.ProcessingInstruction: writer.WriteProcessingInstruction(reader.Name, await reader.GetValueAsync()); break; case XmlNodeType.DocumentType: writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), await reader.GetValueAsync()); break; case XmlNodeType.Comment: writer.WriteComment(await reader.GetValueAsync()); break; case XmlNodeType.EndElement: writer.WriteFullEndElement(); break; } } while (await reader.ReadAsync() && (d < reader.Depth || (d == reader.Depth && reader.NodeType == XmlNodeType.EndElement))); }