いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Linq入門記-57 (LINQ to XML, XElement, Load, ストリームを指定して読み込み)


今回は、ストリームを指定して読み込みを行うXElement.Loadメソッドについてメモ。

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


文字列以外の方法で、読み込みを行う場合
Loadメソッドを利用します。LoadメソッドはXDocument, XElementの
両方で定義されています。書式は以下の通り。

public static XElement Load(
	Stream stream
)

public static XElement Load(
	string uri
)

public static XElement Load(
	TextReader textReader
)

public static XElement Load(
	XmlReader reader
)

public static XElement Load(
	Stream stream,
	LoadOptions options
)

public static XElement Load(
	string uri,
	LoadOptions options
)

public static XElement Load(
	TextReader textReader,
	LoadOptions options
)

public static XElement Load(
	XmlReader reader,
	LoadOptions options
)


大別すると

  • URIを指定して読み込み
  • ストリームを指定して読み込み

となります。今回はストリームを指定しての読み込みについて。


以下、サンプルです。

  #region LinqSamples-54
  /// <summary>
  /// LINQ to XMLのサンプルです。
  /// </summary>
  /// <remarks>
  /// XElement.Loadを利用したストリーム読み込みのサンプルです.
  /// </remarks>
  public class LinqSamples54 : IExecutable
  {
    public void Execute()
    {
      //
      // XElement.Loadには、文字列からロードする他に
      // ストリーミングを指定して内容をロードすることもできる。
      //
      // メソッドは複数のオーバーロードを持っており、以下の書式となる.
      //   Load(Stream)
      //   Load(TextReader)
      //   Load(XmlReader)
      //   Load(Stream, LoadOptions)
      //   Load(TextReader, LoadOptions)
      //   Load(XmlReader, LoadOptions)
      // 大別すると、ストリームのみを指定するものとオプションも指定できるものに分かれる.
      //
      
      //
      // Load(Stream)のサンプル.
      //   -- File.OpenReadで返るのはFileStream
      //      FileStreamはStreamのサブクラス.
      //
      XElement element = null;
      using (var stream = File.OpenRead("xml/Books.xml"))
      {
        element = XElement.Load(stream);
      }
      
      Console.WriteLine(element);
      Console.WriteLine("=============================================");
      
      //
      // Load(TextReader)のサンプル
      //   -- StreamReaderはTextReaderのサブクラス.
      //
      element = null;
      using (var reader = new StreamReader("xml/Data.xml"))
      {
        element = XElement.Load(reader);
      }
      
      Console.WriteLine(element);
      
      //
      // Load(XmlReader)のサンプル.
      //
      element = null;
      using (var reader = XmlReader.Create("xml/PurchaseOrder.xml", new XmlReaderSettings { IgnoreWhitespace = true, IgnoreComments = true }))
      {
        element = XElement.Load(reader);
      }
      
      Console.WriteLine(element);
    }
  }
  #endregion


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

  
    
      Garghentini, Davide
      <a class="keyword" href="http://d.hatena.ne.jp/keyword/XML">XML</a> Developer's Guide
      Computer
      44.95
      2000-10-01
      An in-depth look at creating applications 
        with XML.
    
    ...省略
  
  =============================================
  
    7.25
    
      A
      3
      24.50
    
    ...省略
  
  =============================================
  
    
Ellen Adams 123 Maple Street Mill Valley CA 10999 USA
...省略


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

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

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