今回は、URIを指定して読み込みを行うLoadメソッドについてメモ。
過去の内容は以下から見れます。よろしければご参照くださいませ。
サンプルコードは、まとめてCodePlexにアップしてます。
- いろいろ備忘録日記 サンプルソース 置き場
文字列以外の方法で、読み込みを行う場合
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を指定して読み込み
- ストリームを指定して読み込み
となります。今回はURIを指定しての読み込みについて。
以下、サンプルです。
#region LinqSamples-53 /// <summary> /// LINQ to XMLのサンプルです。 /// </summary> /// <remarks> /// XElement.Loadを利用した読み込みのサンプルです。 /// </remarks> public class LinqSamples53 : IExecutable { const string FILE_URI = @"LinqSamples53_Sample.xml"; const string DOWNLOAD_URI = @"https://sites.google.com/site/gsfzero1/Home/Books.xml?attredirects=0&d=1"; public void Execute() { // // XElementもXDocumentもParseメソッドの他に // 自身を構築するためのLoadメソッドを持っている. // // Parseメソッドは、文字列を解析して構築する時に利用し // Loadメソッドは、既に存在しているものを読み込む際に利用する. // // Loadメソッドは、複数のオーバーロードを持ち // ・URIを指定 // ・ストリームを指定 // に大別される. // // 本サンプルでは、URIによる読み込みを記述する. // URIを指定するLoadメソッドのオーバーロードは以下の通り。 // // public XDocument Load(string) // public XDocument Load(string, LoadOptions) // public XElement Load(string) // public XElement Load(string, LoadOptions) // CreateSampleXml(); var rootElement = XElement.Load(FILE_URI); var query = from element in rootElement.Descendants("Person") let name = element.Attribute("name").Value where !name.StartsWith("b") select new { name }; foreach (var item in query) { Console.WriteLine(item); } // // URLからXMLを読み込み // XMLファイルは以下のサンプルを利用させてもらっている。 // http://msdn.microsoft.com/ja-jp/library/vstudio/bb387066.aspx // Console.WriteLine(XElement.Load(DOWNLOAD_URI)); } void CreateSampleXml() { if (File.Exists(FILE_URI)) { File.Delete(FILE_URI); } var doc = MakeDocument(); doc.Save(FILE_URI); } XDocument MakeDocument() { var doc = new XDocument ( new XDeclaration("1.0", "utf-8", "yes"), new XElement("Persons", MakePersonElements()) ); return doc; } IEnumerable<XElement> MakePersonElements() { var names = new []{ "foo", "bar", "baz" }; var query = from name in names select new XElement ( "Person", new XAttribute("name", name), string.Format("VALUE-{0}", name) ); return query; } } #endregion
実行結果は以下のようになります。
{ name = foo }Garghentini, Davide XML Developer's Guide Computer 44.95 2000-10-01 An in-depth look at creating applications with XML. Garcia, Debra Midnight Rain Fantasy 5.95 2000-12-16 A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.
以下、参照リソースです。
- XElementクラス
- XElement.Loadメソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場