LINQ to XML в C #, где предложение - PullRequest
0 голосов
/ 17 августа 2011

Я получил кусок в xml:

<result index="0" status="0">
          <test field="aaa">value_a</test>
          <test field="bbb">value_b</test>
          <one>
            <name></name>
            <res1></res1>
          </one>
          <two>
            <name></name>
            <res2></res2>
          </two>
          <answer></answer>
          <error></error>
        </result>

var rez = from item in doc.Descendants("result")
                          where 


                          select item;

                foreach (var item in rez)
                {
                    item.Element("res1").SetValue(x);
                    item.Element("res2").SetValue(y);
                }

Что я пишу внутри «где», чтобы выбрать элемент (блок «result»), где элемент «test» с атрибутом «aaa» имеетvalue_a, элемент AND "test" с атрибутом "bbb" имеет значение_b

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Существует несколько разных возможностей, но я выбрал пары значений для ясности и, возможно, небольшого улучшения производительности.Если количество тестовых элементов было высоким, вы можете сделать testPairs словарем.

var rez = from item in doc.Descendants("result")
            let testPairs = item.Elements("test")
                .Select(t => Tuple.Create((string)t.Attribute("field"), (string)t)).ToArray()
            where
                testPairs.Any(t => t.Item1=="aaa" && t.Item2=="value_a") &&
                testPairs.Any(t => t.Item1=="bbb" && t.Item2=="value_b")
            select item;
0 голосов
/ 17 августа 2011

Я не уверен, наверное, это то, что вы имеете в виду

where item.Element("test").Value == "something" 
&& item.Element("test").Attribute("field").Value =="aaa"
...