コード例 #1
0
        public virtual void WriteNode(XmlDictionaryReader reader, bool defattr)
        {
            if (reader == null)
            {
                throw /*System.Runtime.Serialization.*/ DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("reader"));
            }
            int d = (reader.NodeType == XmlNodeType.None ? -1 : reader.Depth);

            do
            {
                XmlNodeType nodeType = reader.NodeType;
                Type        type;
                if (nodeType == XmlNodeType.Text || nodeType == XmlNodeType.Whitespace || nodeType == XmlNodeType.SignificantWhitespace)
                {
                    // This will advance if necessary, so we don't need to call Read() explicitly
                    WriteTextNode(reader, false);
                }
                else if (reader.Depth > d && reader.IsStartArray(out type))
                {
                    WriteArrayNode(reader, type);
                }
                else
                {
                    // These will not advance, so we must call Read() explicitly
                    switch (nodeType)
                    {
                    case XmlNodeType.Element:
                        WriteElementNode(reader, defattr);
                        break;

                    case XmlNodeType.CDATA:
                        WriteCData(reader.Value);
                        break;

                    case XmlNodeType.EntityReference:
                        WriteEntityRef(reader.Name);
                        break;

                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        WriteProcessingInstruction(reader.Name, reader.Value);
                        break;

                    case XmlNodeType.DocumentType:
                        WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), reader.Value);
                        break;

                    case XmlNodeType.Comment:
                        WriteComment(reader.Value);
                        break;

                    case XmlNodeType.EndElement:
                        WriteFullEndElement();
                        break;
                    }
                    if (!reader.Read())
                    {
                        break;
                    }
                }
            }while (d < reader.Depth || (d == reader.Depth && reader.NodeType == XmlNodeType.EndElement));
        }
コード例 #2
0
 public override bool IsStartArray(out Type type)
 {
     return(innerReader.IsStartArray(out type));
 }