- ベストアンサー
C# Linq To XMLでXMLファイルの値を検索する方法
- C#を使用して、XMLファイルの値を効率的に検索するための方法を学びます。
- XMLファイル内の特定の要素を選択し、条件に基づいて値を検索する方法を説明します。
- C#のLinq To XMLを使用して、XMLファイルから特定の要素をフィルタリングして値を取得する方法について解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
もしかして XMLファイルの構造が ルートレベルが複数(この場合tableタグ)になっていませんか? MSXMLだと 単一ルートのファイルを想定しているようですので … <myDS> <table> <row> <column name="Tests">Tests Textvalues</column> </row> <row> <column name="A">Id</column> <column name="B">Description</column> <column name="C">Value</column> </row> <row> <column name="A">1</column> <column name="B">no</column> <column name="C">34 25 E0</column> </row> <row> <column name="A">2</column> <column name="B">yes</column> <column name="C">34 25 E1</column> </row> </table> <table> ... つづく </table> </myDS> といった具合に ルートのタグを追加してみるとか … または FileStreamなどで中身を取得して ルートのタグを追加するとか TextReader rd = new StreamReader("ファイルパス") sXml = "<ds>" + rd.ReadToEnd() + "</ds>"; rd.Close(); XElement element = XElement.Parse(sXml); といった具合でelementを構築するとか …
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
見当違いの回答かもしれませんが … このwhere句だと <column name="A">Id</column> に対する Attributeを取得してしまうのではないかと思います var name = from nm in table.Elements("row") // rowの取得 from cols in nm.Elements("column") // columnの取得 from names in cols.Attributes("name") // name属性の取得 where names.Value == "B" && cols.Value == "no" // name属性の検査と columnの値の検査 select nm; といった具合で
補足
ありがとうございます。 fromを複数回かけることを知りませんでした。ためしにコードを書き換えて実行してみたのですが、 何も値を取得できませんでした。
補足
Rootを追加してみました。 そうすると、Rowの取得の前にもう一段階、Tableの取得がくる訳ですよね。 var name = from nms in table.Elements("table") // tableの取得 from nm in nms.Elements("row") // columnの取得 from cols in nm.Elements("column") // columnの取得 from names in cols.Attributes("name") // name属性の取得 where names.Value == "B" && cols.Value == "no" // name属性の検査と columnの値の検査 select nm; 上記のように書き換えてみたのですが、取得できませんでした。 ということで、若干あきらめて、普通にテキストとして読み込んで、 String contains とif分を駆使しようかと思っています。