嗨,这是我的xml文件。我想选择level4模块的modulecode,moduletiltle和credits,但是当我使用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
};
答案 0 :(得分:0)
您的代码应仅按预期抓取module
的后代level4
个节点。查询的一个问题是它应该遍历XML树而不是以level4
的方式开始编写。换句话说,您的查询中应该引用courseStructure
。
试试这个:
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
变量并将它们全部串在一起但是为了清楚起见我把它分开了。