public XmlTextReader (string url, XmlNameTable nt)
{
- string uriString;
- Stream stream = GetStreamFromUrl (url, out uriString);
+ reader_uri = resolver.ResolveUri (null, url);
+ string uriString = (reader_uri == null) ? String.Empty : reader_uri.ToString ();
XmlParserContext ctx = new XmlParserContext (nt,
new XmlNamespaceManager (nt),
String.Empty,
XmlSpace.None);
- this.InitializeContext (uriString, ctx, new XmlStreamReader (stream), XmlNodeType.Document);
+ this.InitializeContext (uriString, ctx, null, XmlNodeType.Document);
}
public XmlTextReader (TextReader input, XmlNameTable nt)
}
this.XmlResolver = resolver;
string uriString;
+
Stream stream = GetStreamFromUrl (url, out uriString);
this.InitializeContext (uriString, context, new XmlStreamReader (stream), fragType);
}
InitializeContext (url, context, fragment, fragType);
}
- private Stream GetStreamFromUrl (string url, out string absoluteUriString)
+ Uri ResolveUri (string url)
+ {
+ return resolver.ResolveUri (null, url);
+ }
+
+ Stream GetStreamFromUrl (string url, out string absoluteUriString)
{
#if NET_2_1
if (url == null)
if (url.Length == 0)
throw new ArgumentException ("url");
#endif
- Uri uri = resolver.ResolveUri (null, url);
+ Uri uri = ResolveUri (url);
absoluteUriString = uri != null ? uri.ToString () : String.Empty;
return resolver.GetEntity (uri, null, typeof (Stream)) as Stream;
}
private StringBuilder valueBuffer;
+ Uri reader_uri;
private TextReader reader;
private char [] peekChars;
private int peekCharsIndex;
private bool ReadTextReader (int remained)
{
+ if (reader == null && reader_uri != null) {
+ Uri uri = reader_uri;
+ reader_uri = null;
+ string uriString;
+ reader = new XmlStreamReader (GetStreamFromUrl (uri.ToString (), out uriString));
+ }
if (peekCharsLength < 0) { // initialized buffer
peekCharsLength = reader.Read (peekChars, 0, peekChars.Length);
return peekCharsLength > 0;