0

私は次のXMLを持っています:

<Vehicle>
  <Car>
    <Name>Audi</Name>
    <ModelList>
      <Model>A3</Model>
      <Model>A5</Model>
      <Model>A7</Model>
    </ModelList>
  </Car>
  <Car>
    <Name>Benz</Name>
    <ModelList>
      <Model>C Class</Model>
      <Model>E Class</Model>
      <Model>S Class</Model>
    </ModelList>
  </Car>
</Vehicle>

これから、車名「アウディ」のさまざまなモデルを取得するにはどうすればよいですか?

私は次のことを試しました:

var h = from c in load.Descendants("Vehicle") 
        select new { model = c.Descendants("Car").Elements("ModelList").ToArray() };

しかし、これは私に「アウディ」と「ベンツ」のすべてのモデルを与えます。ここで車の名前をどこに渡すことができますか?

4

2 に答える 2

3

フィルタリングを実行するには、Where節または(または類似のもの)だけが必要です。First

正しい名前の車が 1 台だけあることがわかっている場合は、次のように使用できますSingle

var models = load.Descendants("Car")
                 .Single(x => (string) x.Element("Name") == "Audi")
                 .Element("ModelList")
                 .Elements("Model")
                 .Select(x => (string) x);

または、そのような要素が複数存在する可能性があるかどうか (または存在しないかどうか) がわからず、Audi という名前のすべての車のすべてのモデルのリストに満足している場合:

var models = load.Descendants("Car")
                 .Where(x => (string) x.Element("Name") == "Audi")
                 .SelectMany(x => x.Element("ModelList").Elements("Model"))
                 .Select(x => (string) x);

クエリ式の後者のバージョン:

var models = from x in load.Descendants("Car")
             where (string) x.Element("Name") == "Audi"
             from model in x.Element("ModelList").Elements("Model")
             select (string) model;
于 2013-02-06T07:07:12.720 に答える
1

Linq から SQL への使用:

XDocument doc = XDocument.Load("XMLFilePath");
var selectors3 = (from elements in doc.Element("Vehicle").Elements("Car")
                  where elements.Element("Name").Value == "Audi"
                  from items in elements.Element("ModelList").Elements("Model")
                  select items.Value).ToList();
于 2013-02-06T07:40:07.683 に答える