none
LINK to XMLについて RRS feed

  • 質問

  • いつもお世話になります。
    VisualC#2010、WindowsXPでの動作について質問があります。
    LINK to XMLについてどなたかアドバイスをよろしくお願いします。

    books
    には、
    <?xml version='1.0'?>
    <books>
      <book type="interesting" value="-1" />
      <book type="color" value="1" />
      <book type="good" value="3" />
    </books>
    が入っています。
    これで、goodが2より大きいときに、その値を取得したいと考えています。

    XDocument xdoc = XDocument.Parse(books);
    var query = from book in xdoc.Root.Elements()
    where 2 < int.Parse(book.Attribute("good").Value)
    select book;

    string contents = "";
    foreach (var text in query) contents += text + "\r\n";
    MessageBox.Show(contents);

    としてみて、コンパイルは通ったのですが、whereのところで、nullでエラーとなりました。
    ごのように修正したらよいですか?

     

    2010年8月15日 13:50

回答

  • <book type="good" value="3" />

    どう見ても、good なる属性は存在しておらず、値が good である type 属性と 値が 3 である value 属性があるだけです。

    となると、条件としては「type 属性の値が good かつ value 属性の値が 2 以上」ということになるのではないでしょうか。

    • 回答の候補に設定 山本春海 2010年8月27日 6:57
    • 回答としてマーク 山本春海 2010年8月30日 8:17
    2010年8月15日 13:57
  • 提示されたXMLの場合、LINQ の where 句が下記のようになるのでは?

    where (book.Attribute("type").Value == "good") && (2 < int.Parse(book.Attribute("value").Value))
    

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月27日 6:57
    • 回答としてマーク 山本春海 2010年8月30日 8:17
    2010年8月16日 0:30

すべての返信

  • <book type="good" value="3" />

    どう見ても、good なる属性は存在しておらず、値が good である type 属性と 値が 3 である value 属性があるだけです。

    となると、条件としては「type 属性の値が good かつ value 属性の値が 2 以上」ということになるのではないでしょうか。

    • 回答の候補に設定 山本春海 2010年8月27日 6:57
    • 回答としてマーク 山本春海 2010年8月30日 8:17
    2010年8月15日 13:57
  • 具体的なコードだとどのようになりますか?
    2010年8月15日 14:11
  • 提示されたXMLの場合、LINQ の where 句が下記のようになるのでは?

    where (book.Attribute("type").Value == "good") && (2 < int.Parse(book.Attribute("value").Value))
    

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月27日 6:57
    • 回答としてマーク 山本春海 2010年8月30日 8:17
    2010年8月16日 0:30