2010-11-15 85 views
1

嗨查询的后代,我有以下XML结构:LinQ到XML;使用父节点值

<Root> 
<Persons> 
    <PersonList Category="Employee"> 
    <Person Name="John" Id="5" /> 
    <Person Name="Mary" Id="10" /> 
    </PersonList> 
</Persons> 
</Root> 

我期待使用LinqtoXML,为了获得可用的人,我可以简单的写这个查询列表:

var persons = from p in myDoc.Descendants("Person") 
select p; 

现在,我要做的,以获得所有的人其中 CategoryList PersonList元= =到一个特定的值?我不能使用,因为我需要指定PersonList元素,因为XML的结构可能与此不同,而不是元素名称。 这可能吗?

+0

你的理由不利用家长不一点都不清楚。你能举一个例子说明为什么它可能会失败吗? – 2010-11-15 13:35:17

+0

@Jon:这听起来好像他在说嵌套可能不同。 – SLaks 2010-11-15 13:38:43

+0

@SLaks:这是可能的,但不清楚...并且不清楚他想要做什么,如果是这样的话。 – 2010-11-15 13:40:42

回答

2

这听起来像你正在寻找

var people = myDoc.Descendants("PersonList") 
        .Where(p => p.Attribute("Category").Value == something) 
        .Descendants("Person"); 

如果你想获得一个特定的<Person>元素的类别,你可以写

var category = elem.AncestorsAndSelf("PersonList") 
        .First().Attribute("Category").Value; 
+0

感谢SLacks,这就是我一直在寻找的东西。 对于其他人来说,问题在于,将来我可能会将Person元素嵌套到4或5个以上的父项中,以便PersonList元素可能是第5个父元素,而现在不再是第3个元素。 – Raffaeu 2010-11-15 13:42:23