Ответ 1
MSDN говорит: функциональность загрузки LINQ to XML построена на XmlReader. Поэтому вы можете поймать любые исключения, которые вызывают XmlReader. Создайте методы перегрузки и методы XmlReader, которые читают и анализируют документ.
http://msdn.microsoft.com/en-us/library/756wd7zs.aspx ArgumentNullException и SecurityException
EDIT: MSDN не всегда говорит правду. Поэтому я проанализировал код метода загрузки с отражателем и получил такие результаты:
public static XDocument Load(XmlReader reader)
{
return Load(reader, LoadOptions.None);
}
Метод Load - метод вызова:
public static XDocument Load(XmlReader reader, LoadOptions options)
{
if (reader == null)
{
throw new ArgumentNullException("reader"); //ArgumentNullException
}
if (reader.ReadState == ReadState.Initial)
{
reader.Read();// Could throw XmlException according to MSDN
}
XDocument document = new XDocument();
if ((options & LoadOptions.SetBaseUri) != LoadOptions.None)
{
string baseURI = reader.BaseURI;
if ((baseURI != null) && (baseURI.Length != 0))
{
document.SetBaseUri(baseURI);
}
}
if ((options & LoadOptions.SetLineInfo) != LoadOptions.None)
{
IXmlLineInfo info = reader as IXmlLineInfo;
if ((info != null) && info.HasLineInfo())
{
document.SetLineInfo(info.LineNumber, info.LinePosition);
}
}
if (reader.NodeType == XmlNodeType.XmlDeclaration)
{
document.Declaration = new XDeclaration(reader);
}
document.ReadContentFrom(reader, options); // InvalidOperationException
if (!reader.EOF)
{
throw new InvalidOperationException(Res.GetString("InvalidOperation_ExpectedEndOfFile")); // InvalidOperationException
}
if (document.Root == null)
{
throw new InvalidOperationException(Res.GetString("InvalidOperation_MissingRoot")); // InvalidOperationException
}
return document;
}
Прокомментированы строки с возможностью исключения
Мы можем получить следующие исключения: ArgumentNullException, XmlException и InvalidOperationException. MSDN говорит, что вы можете получить SecurityException, но, возможно, вы можете получить этот тип исключения при создании XmlReader.