Я пытаюсь загрузить файл XHTML в LINQ XElement. Однако у меня возникают проблемы с резолвером. Проблема связана со следующим определением:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
У меня есть собственный XmlUrlResolver с переопределенным GetEntity, который преобразует ссылки, такие как http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd в поток локальных ресурсов. Это отлично работает почти для всего XHTML DTD. Единственное, что я не могу решить, - это Uri "- // W3C // DTD XHTML 1.0 Transitional // EN", и я не уверен, что мне следует с ним делать.
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
{
var resourceName = "ePub.DTD." + absoluteUri.Segments[absoluteUri.Segments.GetLength(0) - 1];
if (_resources.Contains(resourceName))
{
Stream dataStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
return dataStream;
}
return base.GetEntity(absoluteUri, role, ofObjectToReturn);
}
Как вы видите в приведенном выше коде, все, что я не могу решить, обрабатывается по умолчанию XmlUrlResolver
. Это означает, что указанная выше ссылка начинается с - // W3C /. Однако базовый метод выдает DirectoryNotFoundException
. Если продолжить, XElement
загрузится нормально. Если я вместо этого верну пустой поток, это вызовет ошибку во время загрузки XHTML в XElement
.
Есть какие-нибудь подсказки относительно обработки такого ПУБЛИЧНОГО определения с помощью пользовательского XmlUrlResolver
?