Ошибка в выборе части документа XML с использованием linq - PullRequest
1 голос
/ 22 мая 2011

Привет, это мой XML-файл. Я хочу выбрать код модуля module4, moduletiltle и кредиты, но когда я использовал узел Descendants, он покажет мне все узлы-потомки для всех уровней. но я хочу запрос linq для выбора только информации модуля level4

<myCourse>
  <courseName>BEng Mobile and Web Computing</courseName>
  <courseStructure>
    <level4>
      <module>
        <moduleCode>ECSC401</moduleCode>
        <moduleTitle>Programming Methodology</moduleTitle>
        <credits>15</credits>
        <semester>1</semester>
      </module>
      <module>
        <moduleCode>ECSC404</moduleCode>
        <moduleTitle>Computer Systems Fundamentals</moduleTitle>
        <credits>15</credits>
        <semester>1</semester>
      </module>
    </level4>
    <level5>
      <module>
        <moduleCode>ECSE501</moduleCode>
        <moduleTitle>Object Oriented Development</moduleTitle>
        <credits>30</credits>
        <semester>0</semester>
      </module>
      <module>
        <moduleCode>ECWM506</moduleCode>
        <moduleTitle>Mobile Computing Principles</moduleTitle>
        <credits>15</credits>
        <semester>1</semester>
      </module>
    </level5>
  </courseStructure>
</myCourse> 

Мой код для выбора потомков level4:

var query = from r in xmlDoc.Element("level4").Descendants("module")
            select new
            {
                moduleCode=r.Element("moduleCode").Value,
                moduleTitle = r.Element("moduleTitle").Value,
                credits = r.Element("credits").Value
            };

1 Ответ

0 голосов
/ 22 мая 2011

Ваш код должен захватывать только потомки module узлов level4, как и предполагалось.Одна из проблем вашего запроса заключается в том, что он должен идти по дереву XML, а не начинаться с level4 так, как вы его написали.Другими словами, в вашем запросе должна быть ссылка на * 1004. *

Попробуйте это:

var level4 = xdoc.Element("courseStructure")
                 .Element("level4");
var query = from r in level4.Descendants("module")
            select new
            {
                moduleCode = r.Element("moduleCode").Value,
                moduleTitle = r.Element("moduleTitle").Value,
                credits = r.Element("credits").Value
            };

Конечно, вы можете заменить переменную level4 и связать их все вместено для ясности я разбил его на части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...