読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET 絡みのメモを公開しています。

Linq入門記-58 (LINQ to XML, XmlException, エラー時に発生する例外)

C# Linq


今回は、LINQ to XMLにてエラーが発生した場合にthrowされる例外について.

過去の内容は以下から見れます。よろしければご参照くださいませ。


LINQ to XMLは内部でXmlReaderを利用しているので
エラーが発生した場合、XmlExceptionが発生します。


以下、サンプルです。

  #region LinqSamples-55
  /// <summary>
  /// LINQ to XMLのサンプルです。
  /// </summary>
  /// <remarks>
  /// LINQ to XMLにてエラー発生時XmlExceptionが発生することを確認するサンプルです。
  /// </remarks>
  public class LinqSamples55 : IExecutable
  {
    public void Execute()
    {
      try
      {
        //
        // LINQ to XMLは内部でXmlReaderを利用している.
        // なので、エラーが発生した場合、XmlReaderの場合と
        // 同様にXmlExceptionが発生する.
        //
        XElement.Parse(GetXmlStrings());
      }
      catch(XmlException xmlEx)
      {
        Console.WriteLine(xmlEx.ToString());
      }
    }
    
    string GetXmlStrings()
    {
      //
      // わざと解析エラーになるXML文字列を作成.
      //
      return @"<data>
                 <id>1</id>
                 <id>2</id>
               </dat>";
    }
  }
  #endregion


実行結果は以下のようになります。

  System.Xml.XmlException: 行 1、位置 2 にある開始タグ 'data' と終了タグ 'dat' が対応していません。 行 4、位置 18。
     場所 System.Xml.XmlTextReaderImpl.Throw(Exception e)
     場所 System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
     場所 System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
     場所 System.Xml.XmlTextReaderImpl.ParseEndElement()
     場所 System.Xml.XmlTextReaderImpl.ParseElementContent()
     場所 System.Xml.XmlTextReaderImpl.Read()
     場所 System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
     場所 System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
     場所 System.Xml.Linq.XElement.ReadElementFrom(XmlReader r, LoadOptions o)
     場所 System.Xml.Linq.XElement.Load(XmlReader reader, LoadOptions options)
     場所 System.Xml.Linq.XElement.Parse(String text, LoadOptions options)
     場所 Gsf.Samples.LinqSamples55.Execute()


以下、参照リソースです。

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。