[MonoTODO] // FIXME: Check how expanded entity is handled here.
 public TextReader GetRemainder()
 {
     if (entity != null)
     {
         entity.Close();
         entity = null;
         entityNameStack.Pop();
     }
     return(source.GetRemainder());
 }
예제 #2
0
        public void Resolve()
        {
            if (ActualUri == String.Empty)
            {
                LoadFailed         = true;
                LiteralEntityValue = String.Empty;
                return;
            }

            if (Root.ExternalResources.ContainsKey(ActualUri))
            {
                LiteralEntityValue = (string)Root.ExternalResources [ActualUri];
            }
            Stream s = null;

            try {
                s = resolver.GetEntity(absUri, null, typeof(Stream)) as Stream;
                XmlTextReaderImpl xtr = new XmlTextReaderImpl(ActualUri, s, Root.NameTable);
                // Don't skip Text declaration here. LiteralEntityValue contains it. See spec 4.5
                LiteralEntityValue = xtr.GetRemainder().ReadToEnd();

                Root.ExternalResources.Add(ActualUri, LiteralEntityValue);
                if (Root.ExternalResources.Count > DTDObjectModel.AllowedExternalEntitiesMax)
                {
                    throw new InvalidOperationException("The total amount of external entities exceeded the allowed number.");
                }
            } catch (Exception) {
//				loadException = ex;
                LiteralEntityValue = String.Empty;
                LoadFailed         = true;
//				throw NotWFError ("Cannot resolve external entity. URI is " + ActualUri + " .");
            } finally {
                if (s != null)
                {
                    s.Close();
                }
            }
        }