public void Load(Compiler compiler, object stylesheet, XmlResolver xmlResolver)
{
Debug.Assert(compiler != null);
_compiler = compiler;
_xmlResolver = xmlResolver ?? XmlNullResolver.Singleton;
XmlReader reader = stylesheet as XmlReader;
if (reader != null)
{
_readerSettings = new QueryReaderSettings(reader);
Load(reader);
}
else
{
// We should take DefaultReaderSettings from Compiler.Settings.DefaultReaderSettings.
string uri = stylesheet as string;
if (uri != null)
{
// If xmlResolver == null, then the original uri will be resolved using XmlUrlResolver
XmlResolver origResolver = xmlResolver;
if (xmlResolver == null || xmlResolver == XmlNullResolver.Singleton)
origResolver = new XmlUrlResolver();
Uri resolvedUri = origResolver.ResolveUri(null, uri);
if (resolvedUri == null)
{
throw new XslLoadException(SR.Xslt_CantResolve, uri);
}
_readerSettings = new QueryReaderSettings(new NameTable());
using (reader = CreateReader(resolvedUri, origResolver))
{
Load(reader);
}
}
else
{
IXPathNavigable navigable = stylesheet as IXPathNavigable;
if (navigable != null)
{
reader = XPathNavigatorReader.Create(navigable.CreateNavigator());
_readerSettings = new QueryReaderSettings(reader.NameTable);
Load(reader);
}
else
{
Debug.Fail("Should never get here");
}
}
}
Debug.Assert(compiler.Root != null);
compiler.StartApplyTemplates = f.ApplyTemplates(nullMode);
ProcessOutputSettings();
foreach (AttributeSet attSet in compiler.AttributeSets.Values)
{
CheckAttributeSetsDfs(attSet); // Check attribute sets for circular references using dfs marking method
}
}