Чтение данных XML с использованием класса XDocument - PullRequest
2 голосов
/ 15 декабря 2011

У меня есть XML-файл, скажем (test.xml)

<root loc-ver="1.0">
  <data name="String1" xml:space="preserve">
        <value loc="root_data_value_2">Description number1</value>
    </data>
  <data name="String2" xml:space="preserve">
        <value loc="root_data_value_3">Description number 2</value>
    </data>
</root>

Теперь, если

Я указываю имя = "String1", я должен получить значение как "Описание номер1"

Я указываю имя = "String2", я должен получить значение как Описание number2

Я пытаюсь с подходом, но безрезультатно

 XDocument doc = XDocument.Load(@"D:\test.xml");
 string search = "String10";

 var lv1s = from lv1 in doc.Descendants("data")
            select lv1.Name;

1 Ответ

5 голосов
/ 15 декабря 2011

Звучит так, как вы хотите:

string name = "String1"; // Or whatever
var query = from data in doc.Descendants("data")
            where (string) data.Attribute("name") == name
            select (string) data.Element("value");

string description = query.First(); // Or FirstOrDefault etc

Вы должны подумать о том, что вы хотите, чтобы произошло, если нет точно одного результата.Является ли это ошибочным состоянием (если это так, используйте Single()), если вы используете все результаты (если это так, просто итерируйте по query), если вы используете первый результат, если он доступен, и игнорируйте его в противном случае (если так, используйте FirstOrDefault() и проверьте, является ли результат нулевым), если вы используете первый результат, и это ошибка, если его нет (если так, используйте First()).

...