public static object ReadTypedValue(XmlReader reader,
object type, XmlNamespaceManager nsResolver,
StringBuilder tmpBuilder)
#endif
{
if (tmpBuilder == null)
{
tmpBuilder = new StringBuilder();
}
XmlSchemaDatatype dt = type as XmlSchemaDatatype;
XmlSchemaSimpleType st = type as XmlSchemaSimpleType;
if (st != null)
{
dt = st.Datatype;
}
if (dt == null)
{
return(null);
}
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (reader.IsEmptyElement)
{
return(null);
}
tmpBuilder.Length = 0;
bool loop = true;
do
{
reader.Read();
switch (reader.NodeType)
{
case XmlNodeType.SignificantWhitespace:
case XmlNodeType.Text:
case XmlNodeType.CDATA:
tmpBuilder.Append(reader.Value);
break;
case XmlNodeType.Comment:
break;
default:
loop = false;
break;
}
} while (loop && !reader.EOF && reader.ReadState == ReadState.Interactive);
return(dt.ParseValue(tmpBuilder.ToString(), reader.NameTable, nsResolver));
case XmlNodeType.Attribute:
return(dt.ParseValue(reader.Value, reader.NameTable, nsResolver));
}
return(null);
}