这个LINQ查询有什么问题

时间:2011-12-01 10:05:20

标签: c# linq xpath .net-3.5 linq-to-xml

我有以下XML

<School Version="30">
    <Math>
        <Lesson1 Type="Active">Introduction</Reset_mode>
        <Lesson2 Type="Active">Fundamentals</Reset_mode>         
    </Math>
</School>

我想获得子课程第1课,第2课

我在XDocument中加载XML

我不得不质疑 - 这个查询有什么问题

var nodes = from C in document.Element("School").Elements()
            where document.Element("School").Elements().Contains(t => t.Name == "Math")
            select C ; //shortcutsXMLDocument.SelectNodes(Query); 

它引起错误。

我也可以在XDocument中使用XPath吗?

4 个答案:

答案 0 :(得分:3)

您正在寻找ShortcutList元素:

Element("ShortcutList")

哪个不存在。

你应该写这个来获得subLessons:

var items = document.Element("School").Element("Math").Elements();

foreach(var item in items)
{
    DoSomething(item);
}

答案 1 :(得分:1)

LINQ to XML:

 from subject in XDocument.Load(xml).Element("School").Elemens()
 where subject.Name == "Math"
 select subject.Elements();

使用XmlDocument的XPath:

var doc = new XmlDocument();
doc.LoadXml(xml);
var nodes = doc.SelectNodes("School/Math/Lesson1 or School/Math/Lesson2");

答案 2 :(得分:0)

document.Decendants("Math");

使用您的两个元素为您提供IEnumerable。 它等于xpath // Math

答案 3 :(得分:0)

来自此命名空间System.Xml.XPath的XElement / XDocument上使用的Xpath案例。

这是您对路径的查询...

var nodes = from document.XPathSelectElements中的C(“./ Math”)             选择C; //shortcutsXMLDocument.SelectNodes(Query);