2010-11-15 74 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